Ana içeriğe geç Tamamlayıcı içeriğe geç

Store

Store ifadesi bir QVD, Parquet, CSV veya TXT dosyası oluşturur.

Söz Dizimi:  

Store [ fieldlist from] table into filename [ format-spec ];

Deyim, açıkça adlandırılmış bir QVD, Parquet veya metin dosyası oluşturur.

Bir Parquet içine depolamadığınız sürece deyim yalnızca bir veri tablosundan alanları dışa aktarabilir. Birkaç tablodan alanlar bir QVD, CSV veya TXT dosyasına aktarılacaksa dışa aktarılması gereken veri tablosunu oluşturmak için kodda önceden açık bir join yapılmalıdır. Parquet dosyalarında verileri iç içe geçirerek tek bir Parquet içinde birden fazla tablo saklayabilirsiniz.

Metin değerleri, UTF-8 içindeki CSV dosyasına BOM biçiminde dışa aktarılır. Bir sınırlayıcı belirtilebilir, bk. LOAD. Bir CSV dosyasına yönelik store deyimi BIFF dışa aktarımı desteklemez.

Bilgi notuDoğru biçimlendirilmemiş verilerin bulunduğu bazı durumlarda alanlar, verilerin doğru şekilde yorumlanmasını sağlamak için çift tırnak işareti içine alınır. Bu, örneğin alanda tırnak işareti, virgül, boşluk veya satır sonu gibi karakterler olduğunda gerçekleşir.

Dosyanızı kişisel alanınızda mı yoksa yazma izinlerine sahip olduğunuz paylaşılan bir alanda mı depolayacağınızı belirtebilirsiniz. Paylaşılan bir alanda depolarsanız üyeler alanda uygulamalar oluşturmak için bu verileri kullanabilir. bk.: Paylaşılan alanlarda izinleri yönetme.

Bağımsız Değişkenler:  

Store komutu bağımsız değişkenleri
Bağımsız Değişken Açıklama
fieldlist::= ( * | field) { , field } )

Seçilecek alanların listesi. Alan listesi olarak * kullanılması tüm alanlara işaret eder. 

field::= fieldname [as aliasname ]

fieldname, table içindeki bir alan adıyla aynı olan metindir. (Boşluklar veya diğer standart olmayan karakterler içermesi halinde alan adının düz çift tırnak işaretleri veya köşeli ayraçlar içine alınması gerektiğini unutmayın.)

aliasname, sonuç olarak elde edilen QVD veya CSV dosyasında kullanılacak alan için bir alternatif addır.

table Veriler için kaynak olarak kullanılacak önceden yüklenmiş bir tabloyu temsil eden kod etiketi.
filename

Mevcut bir klasör veri bağlantısının geçerli yolu dahil hedef dosyanın adı. Neyin geçerli bir yol olarak kabul edildiğine ilişkin ayrıntılar için bk. Geçerli alan klasör yolları için kurallar.

Qlik Cloud Analizleri içindeki hiyerarşik klasör yapıları desteklenir ve deyimde referans verilebilir.

Örnekler:  

  • Kişisel alan (üst düzey yol): [lib://DataFiles/abc.qvd]

  • Kişisel alan (iç içe geçmiş klasör): [lib://DataFiles/MyFolder/abc.qvd]

  • Paylaşılan alan (üst düzey yol): [lib://TeamSharedSpace:DataFiles/xyz.qvd]

  • Paylaşılan alan (iç içe geçmiş klasör): [lib://TeamSharedSpace:DataFiles/MyFolder/abc.qvd]

Daha fazla bilgi ve örnekler için bk. Dosyaları Qlik Cloud Analizleri içindeki alanlara depolama.

format-spec ::=( ( txt | qvd | parquet), compression is codec)

Biçim belirtimini bu dosya biçimlerinden biri olarak ayarlayabilirsiniz. Biçim belirtimi atlanırsa qvd olduğu varsayılır.

  • CSV ve TXT dosyaları için txt.

  • QVD dosyaları için qvd.

  • Parquet dosyaları için parquet.

parquet kullanıyorsanız compression is ile hangi sıkıştırma codec'inin kullanılacağını da ayarlayabilirsiniz. compression is ile sıkıştırma codec'ini belirtmezseniz snappy kullanılır. Aşağıdaki sıkıştırma ayarları kullanılabilir:

  • uncompressed

  • snappy

  • gzip

  • lz4

  • brotli

  • zstd

  • lz4_hadoop

Örnek:

Store mytable into [lib://DataFiles/myfile.parquet] (parquet, compression is lz4);

Bilgi notuDataFiles bağlantılarının dosya uzantısı büyük-küçük harfe duyarlıdır. Örneğin: .qvd.

Örnekler:  

Store mytable into [lib://DataFiles/xyz.qvd];

Store * from mytable into [lib://DataFiles/myfile.qvd];

Store Name, RegNo from mytable into [lib://DataFiles/xyz.qvd];

Store Name as a, RegNo as b from mytable into [lib://DataFiles/myfile.qvd];

Store mytable into [lib://DataFiles/myfile.txt] (txt);

Store mytable into [lib://DataFiles/myfile.parquet] (parquet);

Store * from mytable into [lib://DataFiles/myfile.csv] (txt);

Store * from mytable into [lib://TeamSharedSpace:DataFiles/myfile.qvd];

Parquet dosyalarında saklama

Parquet, her alanın belirli bir türde veri (örneğin in32, çift, zaman damgası veya metin) içerdiği, güçlü bir şekilde yazılmış bir dosya biçimidir. Qlik Sense, dahili verileri, farklı kaynaklardan gelen verilerin aynı alanlarda karıştırılabildiği, detaya girmeden yazılmış bir dual olarak kaydeder. Parquest'teki her bir alanda dual'in sadece bir parçası kaydedilebildiğinden, her bir alanın ne içerdiğini bilmek önemlidir. Varsayılan olarak Qlik Sense, alanın nasıl kaydedilmesini gerektiğini belirlemek için alan türünü kullanır. Verileri Parquet dosyalarında belirli bir biçimde kaydederken alanlarınızı yüklerken ne tür veriler olduğunu belirtmeniz gerekir. Verileri bir Parquet dosyasındaki uyumlu olmayan alanlara, örneğin ayıları metin alanına veya metni bir zaman damgası alanına kaydetmeye çalışırsanız boş değerler elde edersiniz.

Parquet'e kaydetmeyi planladığınız verileri yüklerken varsayılan davranış değiştirilebilir. Bunu veri türünüzü değiştirecek şekilde biçimlendirebilir veya Parquet'te belirli sütun türlerini zorla uygulayacak şekilde etiketleyebilirsiniz.

Parquet'te depolama için verileri biçimlendirme

Verilerinizi sınıflandırmak için Qlik Sense biçimlendirme işlevlerini kullanabilirsiniz. Örneğin Text(), Num(), Interval() veya Timestamp(), Parquet'te veri kaydederken veri biçimlerini zorla uygulayabilir. Qlik Sense, alan özelliklerine ve otomatik alan etiketlerine dayanarak neredeyse 20 veri türüne veri kaydedebilir. Daha fazla bilgi için bk. Yorumlama fonksiyonları.

Örnek: Verileri Num() ve Text() ile biçimlendirme

Aşağıdaki örnekte, verilerin Parquet'te depolamak için hazırlanması gösterilmektedir. Num(), sayı alanına uygulanır. Text() hem metin hem karışık için uygulanır. Karışık olması durumunda Text(), Parquet'te sayı alanı gibi davranılmasını engeller ve metin değerlerinin boş değerlere değiştirilmesini sağlar.

Data: LOAD * INLINE [ num, text, mixed 123.321, abc, 123 456.654, def, xyz 789.987, ghi, 321 ]; Format:
NoConcatenate LOAD num, text, Text(mixed) as mixed RESIDENT Data; STORE Format INTO [lib://DataFiles/Tmp.parquet] (parquet);

Parquet'te depolamak için verileri etiketleme

Verileri Parquet'e kaydederken belirli sütun türlerini zorla uygulamak için verilerinizi $parquet etiketleriyle etiketleyin. Her veri türü, ilgili kontrol etiketini ekleyerek zorla uygulanabilir. Örneğin bir alanı Parquet'te INT32 olarak kaydedecekseniz komut dosyasında $parquet-int32 ile etiketleyin. Veri türüne bağlı olarak dual verinin dizesi veya sayısal temsili kaydedilecektir.

Aşağıdaki Parquest kontrol etiketleri, Parquest dosyalarına kaydetmek için alanları etiketlemek üzere kullanılabilir.

Parquet kontrol etiketleri
Kontrol etiketiDualFiziksel türMantıksal türDönüştürülmüş tür
$parquet-booleanSayıBOOLEANNONENONE
$parquet-int32SayıINT32NONENONE
$parquet-int64SayıINT64NONENONE
$parquet-floatSayıFLOATNONENONE
$parquet-doubleSayıDOUBLENONENONE
$parquet-bytearrayDizeBYTE_ARRAYNONEUTF8
$parquet-bytearrayfixSayıFIXED_LEN_BYTE_ARRAYNONEDECIMAL
$parquet-decimalSayıINT64DECIMALDECIMAL
$parquet-dateSayıINT32DATEDATE
$parquet-timeSayıINT64TIMETIME_MICROS
$parquet-timestampSayıINT64TIMESTAMPTIMESTAMP_MICROS
$parquet-stringDizeBYTE_ARRAYSTRINGUTF8
$parquet-enumDizeBYTE_ARRAYENUMENUM
$parquet-intervalSayıFIXED_LEN_BYTE_ARRAYINTERVALINTERVAL
$parquet-jsonDizeBYTE_ARRAYJSONJSON
$parquet-bsonDizeBYTE_ARRAYBSONBSON
$parquet-uuidDizeFIXED_LEN_BYTE_ARRAYUUIDNONE

Örnek: Parquet'te depolamak için verileri etiketleme

Bu örnekte iki etiket, Parquet için verileri tanımlamak üzere kullanılır. num alanı, Parquet'te INT32 şeklinde ayarlanacak bir sayı alanı olarak tanımlamak üzere $parquet-int32 ile etiketlenir.

Data: LOAD * INLINE [ num, text, 123.321, abc 456.654, def 789.987, ghi ]; TAG num WITH '$parquet-int32'; STORE Format INTO [lib://DataFiles/Tmp.parquet] (parquet);

İç içe geçirilmiş verileri Parquet dosyalarında saklama

Birden fazla tabloyu yapılandırılmış verilerde iç içe geçirerek Parquet dosyalarında saklayabilirsiniz. Store, yapılandırılmış düğümleri destekler ve düğümleri bir yıldız şemasında listeler. Tek tablolar, Delimiter is belirteci kullanılarak iç içe modda da saklanabilir.

Tabloları depolarken dahil etmek istediğiniz tabloları virgüllerle ayırarak belirtin. Örneğin: STORE Table1, Table2, Table3 INTO [lib://<file location>/<file name>.parquet] (parquet);. Store ifadesinde bir alan listesi kullanarak hangi alanların saklanacağını kontrol edebilirsiniz. Örneğin, STORE Field1, Field2, FROM Table1, Table2 INTO [lib://<file location>/<file name>.parquet] (parquet);. Alan listesindeki tüm alanlar, listelenen alanlardan en az birinde olmalıdır. Store deyimindeki ilk tablo, yıldız şemasında değer tablosu olarak kullanılacaktır.

Alan adları, grupların oluşturulma ve iç içe geçirilme şeklini kontrol etmek için kullanılır. Varsayılan olarak alan adları, noktayla düğümlere ayrılır (.). Sınırlayıcı, FieldNameDelimiter sistem değişkenini ayarlayarak veya Sınırlayıcı: belirticisi kullanılarak değiştirilebilir. Belirtici, sistem değişkenini geçersiz kılar. Daha fazla bilgi için bk. Veri yükleme düzenleyicisinde değişkenlerle çalışma.

Alan adları, sınırlayıcıyla ayrılır ve parçalar, iç içe geçmiş gruplarla şema oluşturmak için kullanılır. Örneğin STORE Field1, Field1.Field2, Field1.Field3, Field1.Field4 FROM Table1 INTO [nested.parquet] (parquet, delimiter is '.');, Fields1, Field2 ve Field3, Field4 ile iki grup (Group1 ve Group2) oluşturacaktır.

Bilgi notuGruplar ve alanlar, şemadaki bir düğümle aynı ada sahip olmayabilir. Örneğin, Adres belirsiz ve hem bir veri alanı hem de grup olduğu için STORE Address, Address.Street INTO [nested.parquet] (parquet, delimiter is '.''); başarısız olacaktır.

İç içe geçirilmiş verileri Parquet içinde depolarken tablolar arasındaki anahtarlar, şemada bağlantı düğümlerine dönüşür. Tablolar, şemada yapılandırılmış düğümlere dönüştürülür. Alan adlarını kullanarak varsayılan dönüşümü geçersiz kılabilirsiniz.

Örnek: İç içe geçirilmiş verileri bir Parquet dosyasında saklama

company: LOAD * INLINE [ company, contact A&G, Amanda Honda Cabro, Cary Frank Fenwick, Dennis Fisher Camros, Molly McKenzie ]; salesrep: LOAD * INLINE [ company, salesrep A&G, Bob Park Cabro, Cezar Sandu Fenwick, Ken Roberts Camros, Max Smith ]; headquarter: LOAD * INLINE [ company, country, city A&G, USA, Los Angeles Cabro, USA, Albuquerque Fenwick, USA, Baltimore Camros, USA, Omaha ]; region: LOAD * INLINE [ region, city West, Los Angeles Southwest, Albuquerque East, Baltimore Central, Omaha ]; STORE company, salesrep, headquarter, region INTO [lib://DataFiles/company.parquet] (parquet) DROP TABLES company, salesrep, headquarter, region;

Ortaya çıkan Parquet dosyası aşağıdaki şemaya sahiptir:

company (String) contact (String) company:salesrep (List) salesrep (Group) salesrep (String) company:headquarter (List) headquarter (Group) country (String) city (String) city:region (List) region (Group) region (String)

Sınırlamalar

Parquet içinde depolanan iç içe geçirilmiş veriler aşağıdaki sınırlamalara sahiptir:

  • Mağaza, harita düğümlerini desteklemez.

  • Depolama, iç içe geçirilmiş parquet dosyaları yüklemesinden oluşturulan anahtar alanları içermez.

  • Tablolardan alınan, anahtar alanlarla bağlanmayan verileri birlikte depolayamazsınız.

  • İç içe geçirilmiş dosya, veri modelinin normalleştirmesini kaldırır. Referans verilmeyen değerler kaydedilmeyecek ve birden çok kez referans verilen değerler kopyalanacaktır.

Dosyaları Qlik Cloud Analizleri içindeki alanlara depolama

Qlik Cloud içindeki bir komut dosyasında bir Store deyimi kullandığınızda, oluşturulan dosyaları depolamak istediğiniz bir alandaki tam klasöre referans verebilirsiniz. Geçerli alan klasör yolları için kuralları izleyin. Ayrıca aşağıdaki davranışlar da geçerlidir ve Store deyimlerine özgüdür:

  • Alan mevcutsa ancak belirtilen klasör yolu mevcut değilse yol, alanda oluşturulacaktır. Tanımlanan klasör yapısına bağlı olarak bir veya daha fazla klasör oluşturulabilir. Dosya oluşturulur ve orada saklanır.

  • Alan mevcutsa ancak belirtilen klasör yolu geçersiz klasör sınırlayıcıları kullanıyorsa (örneğin, \, \\, //, /./ veya /../) Store deyimi yine de yürütülür. Çıktı dosyası bunun yerine hedef uzaydaki en üst düzey yola kaydedilir ve yalnızca belirtilen adı değil, tam yolunu içeren bir ada sahip olur.

  • Alan mevcut değilse Store deyimi yürütülemez ve bir hata döndürür.

Aşağıdaki örnekler, Store deyiminizdeki boşlukta belirli bir klasör yoluna nasıl referans verileceğini göstermektedir.

Örnek: Bir alanın üst düzey yolunda dosya saklama

Bu örnekte, mytable tablosunun tamamı myfile.qvd adlı bir dosya olarak Qlik Cloud Analizleri içine aktarılır. Dosya, TeamSharedSpace paylaşılan alanına eklenir. Dosya belirli bir klasör içinde değil, bunun yerine alandaki en üst düzey yolda bulunuyor.

Store * from mytable into [lib://TeamSharedSpace:DataFiles/myfile.qvd];

Örnek: Bir alanda belirli bir klasör yolunda dosya saklama

Bu örnekte, mytable tablosunun tamamı myfile.qvd adlı bir dosya olarak Qlik Cloud Analizleri içine aktarılır. Dosya TeamSharedSpace alanındaki SalesData klasörüne eklenir.

Store * from mytable into [lib://TeamSharedSpace:DataFiles/SalesData/myfile.qvd];

Komut dosyalarında alan klasörü yapısına referans verilmesi hakkında daha fazla bilgi için bk. Uygulama ve komut dosyası geliştirmede alan klasör yapısına başvurma.

Bu sayfa size yardımcı oldu mu?

Bu sayfa veya içeriği ile ilgili bir sorun; bir yazım hatası, eksik bir adım veya teknik bir hata bulursanız, bize bildirin, düzeltelim!