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 UTF-8 com o formato BOM. É possível especificar um separador. Para isso, consulte LOAD. O comando store para um arquivo CSV não suporta exportação de BIFF.
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:
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. Para obter detalhes sobre o que é considerado um caminho válido, consulte Regras para caminhos válidos de pastas de espaço. No Qlik Cloud Analytics, há suporte para estruturas de pastas hierárquicas e elas podem ser referenciadas na instrução. Exemplos:
Para obter mais informações e exemplos, consulte Armazenando arquivos em espaços no Qlik Cloud Analytics. |
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.
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:
Exemplo: Store mytable into [lib://DataFiles/myfile.parquet] (parquet, compression is lz4); |
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.
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.
Tag de controle | Dual | Tipo físico | Tipo lógico | Tipo convertido |
---|---|---|---|---|
$parquet-boolean | Número | BOOLEAN | NONE | NONE |
$parquet-int32 | Número | INT32 | NONE | NONE |
$parquet-int64 | Número | INT64 | NONE | NONE |
$parquet-float | Número | FLOAT | NONE | NONE |
$parquet-double | Número | DOUBLE | NONE | NONE |
$parquet-bytearray | Cadeia | BYTE_ARRAY | NONE | UTF8 |
$parquet-bytearrayfix | Número | FIXED_LEN_BYTE_ARRAY | NONE | DECIMAL |
$parquet-decimal | Número | INT64 | DECIMAL | DECIMAL |
$parquet-date | Número | INT32 | DATE | DATE |
$parquet-time | Número | INT64 | TIME | TIME_MICROS |
$parquet-timestamp | Número | INT64 | TIMESTAMP | TIMESTAMP_MICROS |
$parquet-string | Cadeia | BYTE_ARRAY | STRING | UTF8 |
$parquet-enum | Cadeia | BYTE_ARRAY | ENUM | ENUM |
$parquet-interval | Número | FIXED_LEN_BYTE_ARRAY | INTERVAL | Intervalo |
$parquet-json | Cadeia | BYTE_ARRAY | JSON | JSON |
$parquet-bson | Cadeia | BYTE_ARRAY | BSON | BSON |
$parquet-uuid | Cadeia | FIXED_LEN_BYTE_ARRAY | UUID | NONE |
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.
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.
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
O arquivo Parquet resultante possui o seguinte esquema:
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.
Armazenando arquivos em espaços no Qlik Cloud Analytics
Ao usar uma instrução de Store em um script de carregamento no Qlik Cloud, você pode fazer referência à pasta exata em um espaço onde deseja armazenar os arquivos criados. Siga as regras para caminhos válidos de pastas de espaço. Além disso, os comportamentos a seguir também se aplicam e são exclusivos das instruções de Store:
Se o espaço existir, mas o caminho de pasta especificado não existir, o caminho será criado em um espaço. Uma ou mais pastas podem ser criadas, dependendo da estrutura de pastas definida. O arquivo é gerado e armazenado ali.
Se o espaço existir, mas o caminho de pasta especificado usar delimitadores de pasta inválidos (por exemplo, \, \\, //, /./ ou /../), a instrução Store ainda será executada. Em vez disso, o arquivo de saída será salvo no caminho de nível superior no espaço de destino e terá um nome que contém seu caminho completo, não apenas o nome especificado.
Se o espaço não existir, a instrução Store não poderá ser executada e retornará um erro.
Os exemplos a seguir demonstram como fazer referência a um caminho de pasta específico no espaço na sua instrução Store.
Exemplo: Armazenando arquivo no caminho de nível superior de um espaço
Nesse exemplo, a tabela inteira mytable é exportada para o Qlik Cloud Analytics como um arquivo chamado myfile.qvd. O arquivo é adicionado ao espaço compartilhado TeamSharedSpace. O arquivo não está localizado em nenhuma pasta específica, mas sim no caminho de nível superior no espaço.
Store * from mytable into [lib://TeamSharedSpace:DataFiles/myfile.qvd];
Exemplo: Armazenando arquivo em um caminho de pasta específico em um espaço
Nesse exemplo, a tabela inteira mytable é exportada para o Qlik Cloud Analytics como um arquivo chamado myfile.qvd. O arquivo é adicionado à pasta SalesData no espaço TeamSharedSpace.
Store * from mytable into [lib://TeamSharedSpace:DataFiles/SalesData/myfile.qvd];
Para obter mais informações sobre como referenciar a estrutura da pasta de espaço em scripts de carregamento, consulte Fazendo referência da estrutura de pastas do espaço no desenvolvimento de aplicativos e scripts.