Ir para conteúdo principal Pular para conteúdo complementar

Store

O comando Store cria um arquivo QVD, Parquet, CSV ou TXT.

Sintaxe:  

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

O comando criará um arquivo explicitamente nomeado QVD, Parquet ou um arquivo de texto.

O comando só pode exportar campos de uma tabela de dados, a menos que você esteja armazenando em Parquet. Se os campos de várias tabelas forem exportados para um arquivo QVD, CSV ou TXT, uma join explícita deverá ser feita previamente no script para criar a tabela de dados que deve ser exportada. Você pode armazenar várias tabelas em um único Parquet, aninhando os dados nos arquivos Parquet.

Os valores de texto são exportados para o arquivo CSV no formato UTF-8. É possível especificar um separador. Para isso, consulte LOAD. O comando store para um arquivo CSV não suporta exportação de BIFF.

Nota informativaEm alguns casos com dados que não estão bem formados, os campos serão colocados entre aspas duplas para garantir que os dados sejam interpretados corretamente. Isso pode acontecer, por exemplo, quando o campo contém caracteres como aspas, vírgula, espaço ou quebras de linha.

Você pode especificar se deseja armazenar seu arquivo em seu espaço pessoal ou em um espaço compartilhado onde você tem permissões de gravação. Se você armazenar em um espaço compartilhado, os membros poderão usar esses dados para criar aplicativos no espaço. Consulte: Gerenciando permissões em espaços compartilhados.

Argumentos:  

Armazenar argumentos de comando
Argumento Descrição
fieldlist::= ( * | field) { , field } )

Uma lista dos campos a serem selecionados. O uso de * como lista de campos indica todos os campos. 

field::= fieldname [as aliasname ]

fieldname é um texto idêntico a um nome de campo em table. (Observe que o nome do campo deverá estar entre aspas duplas ou colchetes se contiver espaços ou outros caracteres que não sejam padrão).

aliasname é um nome alternativo do campo a ser usado no arquivo QVD ou CSV resultante.

table Um rótulo de script representando uma tabela já carregada, que será usada como fonte dos dados.
filename

O nome do arquivo de destino, incluindo um caminho válido para uma conexão de dados da pasta existente.

Exemplo:  

  • Espaço pessoal: [lib://DataFiles/xyz.qvd]

    Hierarquias de caminhos delimitados por "/" podem ser usadas em nomes de arquivos. No entanto, as UIs do Editor de carregamento de dados e do Gerenciador de dados atualmente não oferecem suporte à exibição de caminhos de forma hierárquica. Se um nome de arquivo delimitado por "/" for usado, ele aparecerá em sua totalidade na coluna do nome do arquivo.

  • Espaço compartilhado: [lib://TeamSharedSpace:DataFiles/xyz.qvd]
format-spec ::=( ( txt | qvd | parquet), compactação é codec)

Você pode definir a especificação do formato para qualquer um desses formatos de arquivo. Se a especificação do formato for omitida, qvd será assumido.

  • txt para arquivos CSV e TXT.

  • qvd para arquivos QVD.

  • parquet para arquivos Parquet.

Se você usar parquet, também poderá definir qual codec de compactação usar com compactação é. Se você não especificar o codec de compactação com compactação é, snappy será usado. As seguintes configurações de compactação estão disponíveis:

  • uncompressed

  • snappy

  • gzip

  • lz4

  • brotli

  • zstd

  • lz4_hadoop

Exemplo:

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

Nota informativaA extensão do arquivo de conexões DataFiles faz distinção entre maiúsculas e minúsculas. Por exemplo: .qvd.

Exemplos:  

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];

Armazenamento em arquivos Parquet

O Parquet é um formato de arquivo fortemente tipado, em que cada campo contém um único tipo específico de dados (como in32, double, timestamp ou texto). O Qlik Sense armazena dados internos como duplos livremente tipados, em que dados de fontes diferentes podem ser misturados nos mesmos campos. Como somente uma parte do duplo pode ser armazenada em cada campo no Parquet, é importante saber o que cada campo contém. Por padrão, o Qlik Sense usa o tipo de campo para determinar como o campo deve ser armazenado. Ao armazenar dados em arquivos Parquet em um formato específico, você deve especificar que tipo de dados são seus campos ao carregá-los. Se você tentar armazenar dados em campos incompatíveis em um arquivo Parquet, como números em um campo de texto ou texto em um campo de carimbo de data/hora, receberá valores nulos.

Ao carregar dados que você pretende armazenar no Parquet, é possível alterar o comportamento padrão. Você pode formatá-los para alterar seu tipo de dados ou marcá-los para forçar tipos de colunas específicos no Parquet.

Formatação de dados para armazenamento no Parquet

É possível usar funções de formatação do Qlik Sense para classificar dados. Por exemplo, Text(), Num(), Interval() ou Timestamp() pode impor formatos de dados ao armazenar dados no Parquet. O Qlik Sense pode armazenar dados em quase 20 tipos de dados, dependendo dos atributos de campo e das tags de campo automáticas. Para obter mais informações, consulte Funções de interpretação

Exemplo: Formatação de dados com Num() e Text()

O exemplo a seguir demonstra a preparação de dados para armazenamento no Parquet. Num() é aplicada ao campo numérico. Text() é aplicado a texto e conteúdo misto. No caso de conteúdo misto, Text() impede que ele seja tratado como um campo numérico no Parquet e que os valores de texto sejam alterados para valores nulos.

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);

Marcação de dados para armazenamento no Parquet

Você marca seus dados com tags $parquet para forçar tipos de coluna específicos ao armazenar dados no Parquet. Cada tipo de dados pode ser aplicado adicionando a tag de controle correspondente. Por exemplo, para armazenar um campo como INT32 no Parquet, marque-o com $parquet-int32 no script de carregamento. Dependendo do tipo de dados, a string ou a representação numérica dos dados duais serão armazenadas.

As seguintes tags de controle do Parquet podem ser usadas para marcar campos para armazenamento em arquivos do Parquet.

Tags de controle do Parquet
Tag de controle DualTipo físicoTipo lógicoTipo convertido
$parquet-booleanNúmeroBOOLEANNONENONE
$parquet-int32NúmeroINT32NONENONE
$parquet-int64NúmeroINT64NONENONE
$parquet-floatNúmeroFLOATNONENONE
$parquet-doubleNúmeroDOUBLENONENONE
$parquet-bytearrayCadeiaBYTE_ARRAYNONEUTF8
$parquet-bytearrayfixNúmeroFIXED_LEN_BYTE_ARRAYNONEDECIMAL
$parquet-decimalNúmeroINT64DECIMALDECIMAL
$parquet-dateNúmeroINT32DATEDATE
$parquet-timeNúmeroINT64TIMETIME_MICROS
$parquet-timestampNúmeroINT64TIMESTAMPTIMESTAMP_MICROS
$parquet-stringCadeiaBYTE_ARRAYSTRINGUTF8
$parquet-enumCadeiaBYTE_ARRAYENUMENUM
$parquet-intervalNúmeroFIXED_LEN_BYTE_ARRAYINTERVALIntervalo
$parquet-jsonCadeiaBYTE_ARRAYJSONJSON
$parquet-bsonCadeiaBYTE_ARRAYBSONBSON
$parquet-uuidCadeiaFIXED_LEN_BYTE_ARRAYUUIDNONE

Exemplo: Marcação de dados para armazenamento no Parquet

Neste exemplo, duas tags são usadas para definir os dados para o Parquet. O campo num é marcado com $parquet-int32 para defini-lo como um campo numérico que será definido como INT32 no Parquet.

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);

Armazenando dados aninhados em arquivos Parquet

Você pode armazenar várias tabelas em arquivos Parquet aninhando-as em dados estruturados. O Store oferece suporte a nós estruturados e nós de lista em um esquema em estrela. Tabelas únicas também podem ser armazenadas no modo aninhado usando o especificador Delimiter is.

Ao armazenar tabelas, especifique as tabelas que deseja incluir separadas por vírgulas. Por exemplo: STORE Table1, Table2, Table3 INTO [lib://<file location>/<file name>.parquet] (parquet);. Você pode controlar quais campos são armazenados usando uma lista de campos no comando Store. Por exemplo STORE Field1, Field2, FROM Table1, Table2 INTO [lib://<file location>/<file name>.parquet] (parquet);. Todos os campos na lista de campos devem estar em uma ou mais tabelas listadas. A primeira tabela da instrução Store será usada como tabela de fatos no esquema em estrela.

Os nomes dos campos são usados para controlar como os grupos serão criados e aninhados. Por padrão, os nomes dos campos são divididos em nós com um ponto (.). O delimitador pode ser alterado definindo a variável de sistema FieldNameDelimiter ou usando o especificador Delimiter is. O especificador substituirá a variável do sistema. Para obter mais informações, consulte Trabalhando com variáveis no editor de carregamento de dados.

Os nomes dos campos são divididos pelo delimitador e as partes são usadas para criar o esquema com grupos aninhados. Por exemplo, STORE Field1, Field1.Field2, Field1.Field3, Field1.Field4 FROM Table1 INTO [nested.parquet] (parquet, delimiter is '.'); criará dois grupos (Grupo1 e Grupo2) com Campos1, Campo2 e Campo3, Campo4.

Nota informativaGrupos e campos não podem ter o mesmo nome em um nó do esquema. Por exemplo, STORE Address, Address.Street INTO [nested.parquet] (parquet, delimiter is '.''); falhará porque Address é ambíguo e é um campo de dados e um grupo.

Ao armazenar dados aninhados no Parquet, as chaves entre as tabelas são transformadas em nós de link no esquema. As tabelas são transformadas em nós estruturados no esquema. Você pode substituir a transformação padrão usando nomes de campo.

Exemplo: Armazenando dados aninhados em um arquivo Parquet

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;

O arquivo Parquet resultante possui o seguinte esquema:

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)

Limitações

O armazenamento de dados aninhados no Parquet tem as seguintes limitações:

  • O armazenamento não oferece suporte a nós de mapa.

  • O armazenamento não inclui campos-chave gerados pelo carregamento de arquivos parquet aninhados.

  • Você não pode armazenar dados de tabelas que não estejam vinculados a campos-chave.

  • O arquivo aninhado desnormaliza o modelo de dados. Valores não referenciados não serão salvos e valores referenciados diversas vezes serão copiados.

Esta página ajudou?

Se você encontrar algum problema com esta página ou seu conteúdo - um erro de digitação, uma etapa ausente ou um erro técnico - informe-nos como podemos melhorar!