Saída de U-SQL no Lago de dados Azure

seria possível dividir automaticamente uma tabela em vários ficheiros com base nos valores das colunas se eu não souber quantos valores de chave diferentes a tabela contém? É possível colocar o valor chave no nome do arquivo?

Author: Chris B. Behrens, 2017-03-07

3 answers

Este é o nosso pedido de topo {[[9]} (e foi previamente pedido no stackoverflow {[[9]} também:). Estamos neste momento a trabalhar nesse sentido e esperamos tê-lo disponível até ao verão.

Até lá, tens de escrever um gerador de guião. Eu tendem a usar U-SQL para gerar o script, mas você poderia fazê-lo com Powershell ou T4 etc. Aqui está um exemplo:

Vamos assumir que quer escrever ficheiros para a coluna name na seguinte tabela/linha @x:

name | value1 | value2
-----+--------+-------
A    | 10     | 20
A    | 11     | 21
B    | 10     | 30
B    | 100    | 200

Tu iria escrever um script para gerar o script como o seguinte:

@x = SELECT * FROM (VALUES( "A", 10, 20), ("A", 11, 21), ("B", 10, 30), ("B", 100, 200)) AS T(name, value1, value2);

// Generate the script to do partitioned output based on name column:

@stmts = 
  SELECT "OUTPUT (SELECT value1, value2 FROM @x WHERE name == \""+name+"\") TO \"/output/"+name+".csv\" USING Outputters.Csv();" AS output 
  FROM (SELECT DISTINCT name FROM @x) AS x;

OUTPUT @stmts TO "/output/genscript.usql" 
USING Outputters.Text(delimiter:' ', quoting:false);

Depois toma genscript.usql, prepara o cálculo de @x e envia-o para obter os dados particionados nos dois ficheiros.

 10
Author: Michael Rys, 2017-09-11 17:30:38
Grande pergunta! Estou interessado em ver com o que o Sr. Rys responde. Desculpa, mas isto é só meia resposta.

Meus primeiros pensamentos são partição de uma ADL tabela usando o valor de chave. Mas, então, eu não tenho certeza de como seria lidar com as saídas separadas se um potencial cláusula WHERE não é determinista. Talvez o CROSS se junte a todos os resultados e ...... passo!

Seria bom ter um loop WHILE com algum código dinâmico!

Confira este post nos fóruns de MS isso fala sobre conjuntos dinâmicos de dados de entrada. Só para que saibas.

Https://social.msdn.microsoft.com/Forums/en-US/aa475035-2d57-49b8-bdff-9cccc9c8b48f/usql-loading-a-dynamic-set-of-files?forum=AzureDataLake

 0
Author: Paul Andrew, 2017-03-07 10:11:31

Há uma nova característica na antevisão pública:

SET @@FeaturePreviews = "DataPartitionedOutput:on";

Você pode adicioná-lo no início do programa, e os dados de saída podem ser particionados pela chave que escolher:

SET @@FeaturePreviews = "DataPartitionedOutput:on";

@result =
SELECT date.Hour AS hour,
       COUNT( * ) AS total,
       ANY_VALUE(message) AS sample_message,
       ANY_VALUE(stack_trace) AS sample_trace
FROM @data
WHERE date.Year == 2018
      AND date.Month == 7
GROUP BY date.Hour
HAVING COUNT( * ) > 80;

OUTPUT @result
TO "/output/parquetfiles-{hour}.csv"
ORDER BY hour DESC,
     total DESC
USING Outputters.Csv(outputHeader : true);

Outro exemplo pode ser encontrado no artigo
processar mais arquivos do que nunca e usar Parquet com análise Azure Data Lake
secção " juntar tudo num exemplo simples de ponta a ponta ".

 0
Author: ilanak, 2018-08-30 09:45:29