Nesta trilha de aprendizagem conectada, criaremos uma cadeia que ilustra como converter um conjunto de dados JSON em CSV. Nesse conjunto de dados de exemplo, há uma matriz de objetos aninhados.
Esse caminho reforça o conceito de looping que aprendemos no exercício JSON Data, bem como o conceito de junção cartesiana no caminho JSON Nested Objects. Se você ainda não tiver concluído esses caminhos, recomendamos que os conclua antes de concluir este.
| Objetivo principal de aprendizado | Recursos do conector JSON |
| Objetivos secundários de aprendizado | O poder do comando Advanced Query da transformação tabular, da iteração e da transformação de variáveis |
| Pré-requisitos | |
| Modelo de cadeia de suporte | CLP | Acesso ao conjunto JSON de objetos aninhados |
Etapa 1: Criar uma corrente
- Adicionar uma nova corrente
- Nomear a cadeia: CLP | Acessando a matriz JSON de objetos aninhados
- Criar uma variável de cadeia
- Nome: cv-JSON-AllDonut
- Valor: https://cs-sftp-training-bucket.s3.amazonaws.com/cs-training/transformation-qs/all_donuts.json
- Salvar a corrente
Etapa 2: Recuperar dados JSON
Use o Conector HTTP para recuperar dados de donuts de um local da Web. Este conjunto de dados ilustra um exemplo de um conjunto de dados JSON mais complexo com uma matriz (vários itens) de objetos aninhados (atributos).
- Adicionar um comando GET do conector HTTP ao nó Start
- Configure o comando com o seguinte:
| Nome | Obter - Todas as sobremesas |
| Nome do usuário | <deixar em branco> |
| Senha | <deixar em branco> |
| Certificado CA | <deixar em branco> |
| Certificado | <deixar em branco> |
| Chave privada do certificado | <deixar em branco> |
| Mostrar resposta | Verificado |
| URL | cv-JSON-AllDonut Variável de cadeia |
| Cadeia de consulta | <deixar em branco> |
| Tipo de conteúdo | aplicativo/json |
| Resposta | <deixar em branco> |
- Salvar o comando
Etapa 3: converter JSON em CSV
Use o Conector JSON para extrair chaves da matriz JSON para identificar as diferentes variedades de rosquinhas.
Para referência, abaixo está o esquema do JSON de todos os donuts:
Esquema
[{"id":"0001","type":"donut","name":"Cake","ppu":0.55,"batters":{"batter":[{"id":"1001","type":"Regular"},{"id":"1002","type":"Chocolate"},{"id":"1003","type":"Blueberry"},{"id":"1004","type":"Devil's Food"}]},"topping":[{"id":"5001","type":"None"},{"id":"5002","type":"Glazed"},{"id":"5005","type":"Sugar"},{"id":"5007","type":"Powdered Sugar"},{"id":"5006","type":"Chocolate with Sprinkles"},{"id":"5003","type":"Chocolate"},{"id":"5004","type":"Maple"}]},{"id":"0002","type":"donut","name":"Raised","ppu":0.55,"batters":{"batter":[{"id":"1001","type":"Regular"}]},"topping":[{"id":"5001","type":"None"},{"id":"5002","type":"Glazed"},{"id":"5005","type":"Sugar"},{"id":"5003","type":"Chocolate"},{"id":"5004","type":"Maple"}]},{"id":"0003","type":"donut","name":"Old Fashioned","ppu":0.55,"batters":{"batter":[{"id":"1001","type":"Regular"},{"id":"1002","type":"Chocolate"}]},"topping":[{"id":"5001","type":"None"},{"id":"5002","type":"Glazed"},{"id":"5003","type":"Chocolate"},{"id":"5004","type":"Maple"}]}]
- Adicione um comando Array to CSV do conector JSON à cadeia.
- Conecte o nó inicial (GET - All Desserts) ao comando Array to CSV.
- Dê um nome ao comando: Array to CSV - Get Variety.
- No parâmetro JSON Data, selecione Response Output from the GET - All Desserts Command.
- Deixe os parâmetros Input Text, Path to root e Filter em branco.
- Deixe o parâmetro Multi-value Delimiter (Delimitador de vários valores) como uma vírgula (,).
- Marque a opção Preview Result.
- Digite variety para o Column Name e .name para os parâmetros JSONPath.
- Selecione Pipe para o parâmetro Delimiter.
- Salvar o comando
Etapa 4: Criar um conjunto de dados iterável
Conforme observado, o conjunto de dados tem uma matriz (ou seja, vários itens) de objetos aninhados. Para processar cada uma das variedades individualmente, os números das linhas devem ser adicionados ao conjunto de dados. Esses números de linha serão usados nos comandos Array to CSV subsequentes para identificar o item de matriz (rosca) para o qual o objeto aninhado (atributos) será analisado.
Para quem está familiarizado com o Chain Builder, você pode se perguntar por que usamos Advanced Query em vez do comando Add Row Numbers. O comando Add Row Numbers inicia a contagem em um (1) e precisamos iniciar a contagem em zero (0), pois as matrizes JSON são baseadas em zero.
- Adicione um comando Advanced Query do conector Tabular Transformation à cadeia.
- Conecte o comando Array to CSV - Get Variety ao comando Advanced Query.
- Dê um nome ao comando: Advanced Query - Add Row Numbers (Consulta avançada - Adicionar números de linha).
- Configure a seção Tables (Tabelas)
- No campo File, especifique o arquivo Converted File Saída do comando Array to CSV - Get Variety.
- Digite varieties no parâmetro Table Name. A consulta especificada será executada nessa tabela.
- No parâmetro Query, digite o seguinte:
SELECT
ROW_NUMBER () OVER (
ORDER BY variety
)-1 RowNum,
variety
FROM
varieties
- Especifique Pipe & Comma para os parâmetros Input Delimiter e Output Delimiter, respectivamente.
- Verifique o parâmetro Preview results.
- Salvar o comando
Etapa 5: Criar uma matriz JSON
Use o comando CSV para JSON do Conector JSON para converter a lista exclusiva de variedades em uma matriz JSON. Um Command Group pode, então, iterar sobre cada item dessa matriz.
- Adicione um comando CSV to JSON do conector JSON à cadeia.
- Conecte o comando Advanced Query - Add Row Numbers ao comando CSV to JSON.
- Configure o comando usando o seguinte:
| Nome | CSV para JSON - Variedades |
| Arquivo de entrada | Resultado Saída do comando Advanced Query - Add Row Numbers |
| Delimitador | Vírgula (,) |
- Salvar o comando
Etapa 6: adicionar um grupo de comandos
Adicione um Command Group à Chain para permitir a iteração em cada uma das variedades de donuts identificadas na etapa Advanced Query.
- Adicione um grupo de comandos à cadeia.
- Conecte o comando CSV to JSON - Varieties à seção In do Command Group.
- Clique no Command Group e selecione o ícone de conta-gotas para alterar a cor do Command para yellow.
- Nomeie o grupo: Donut Varieties.
- Ative a alternância Iterations e selecione o arquivo JSON Output from the CSV to JSON - Varieties Command.
- Salve o grupo de comandos.
Etapa 7: Obter a lista de toppings
Use o comando Array to CSV do Conector JSON para obter a lista de coberturas na matriz JSON aninhada. Essa ação é repetida para cada uma das variedades de donuts.
Por favor, preste atenção especial à declaração de cuidado nas etapas abaixo, indicadas pelo ponto de exclamação vermelho.
- Adicione um comando Array to CSV do conector JSON à cadeia.
- Conecte o grupo Group Start do grupo de comandos Donut Varieties ao comando Array to CSV.
- Nomeie o comando: Array to CSV - Toppings.
- No parâmetro JSON Data, selecione o parâmetro Response Output do comando GET - All Desserts.
- Deixe o parâmetro Input Text em branco.
- No parâmetro Path to root (Caminho para a raiz), aproveitaremos o valor da iteração para especificar o item da matriz no qual a iteração funcionará.
- As etapas a seguir são críticas e devem ser lidas na íntegra antes de concluir esta etapa.
- Clique no parâmetro Path to root. No painel de seleção de variável, expanda o Group Iterator e clique em JSON File Iteration.
- Clique na bolha verde JSON File Iteration no parâmetro Path to root (Caminho para a raiz). Isso abrirá o formulário de transformação de variável. Selecione Get Value from JSON e clique no sinal de mais (+). Digite RowNum (case-sensitive) no campo Value e pressione a tecla Enter. Clique em Aceitar.
- A variável deve ter um asterisco indicando que uma transformação de variável foi aplicada.
- Se alguma dessas etapas falhar, exclua a variável de iteração de arquivo JSON do caminho para a raiz e comece novamente.
- Após a bolha de Iteração de arquivo JSON, digite topping (minúsculas) e pressione a tecla Enter.
- As etapas a seguir são críticas e devem ser lidas na íntegra antes de concluir esta etapa.
- Deixe o parâmetro Filter em branco.
- Deixe o valor padrão como vírgula (,) para o parâmetro Multi-value Delimiter (Delimitador de vários valores).
- Verifique a opção Preview Result.
- Na seção Columns, especificamos a(s) chave(s) na matriz JSON para a qual extrair o(s) valor(es) para uma coluna no CSV resultante.
- No parâmetro Column name, digite topping e, no parâmetro JSONPath, digite .type.
- No parâmetro Delimiter, selecione Comma.
- Salvar o comando
Etapa 8: Obter a lista de rebatedores
Use o comando Array to CSV do Conector JSON para obter a lista de rebatedores na matriz JSON aninhada. Essa ação é repetida para cada uma das variedades de donut. Como esta etapa é muito semelhante à anterior, copie o comando configurado na etapa anterior e simplesmente atualize-o para obter as informações dos batedores.
- Copie o comando Array to CSV - Toppings.
- Conecte o comando Group Start do grupo de comandos Donut Varieties ao comando Array to CSV - Toppings (Copy).
- Nomeie o comando copiado: Array to CSV - Batters.
- No parâmetro Path to root, exclua a bolha de cobertura clicando no X. Digite batters (case-sensitive) e pressione Enter. Em seguida, digite batter e pressione Enter. Você deverá encontrar três bolhas no parâmetro Path to root.
- Iteração de arquivo JSON *
- batters
- batedor
- Na seção Columns (Colunas), altere o Column Name (Nome da coluna) de topping para batter.
- Salvar o comando
Etapa 9: Achatar os dados
Da mesma forma que no último exercício, use uma união cartesiana em um comando Advanced Query do conector de transformação tabular para nivelar o conjunto de dados.
- Adicione um comando Advanced Query do conector Tabular Transformation à cadeia.
- Conecte o comando Array to CSV - Batters e Array to CSV - Toppings ao comando Advanced Query.
- Nomeie o comando: Advanced Query - Flatten JSON Object.
- Na seção Tables, clique uma vez no botão Add para que haja duas tabelas disponíveis. Preencha a seção Tables (Tabelas) de acordo com o seguinte:
| Arquivo | Nome da tabela |
| Arquivo convertido Saída da matriz para CSV - Batedores Comando | Batedor |
| Arquivo convertido Saída da matriz para CSV - Toppings Comando | Topping |
-
No parâmetro Query (Consulta), insira a consulta abaixo:
Selecione '<JSON>' as Variety,Batter,Topping from Batter,Topping
-
- <JSON> Você deve selecionar e substituir a variável Group Iterator no painel Variável e selecionar JSON File Iteration.
- Depois que a variável de iteração de arquivo JSON for selecionada, clique no balão verde para abrir o formulário de transformação de variável.
- Aplique a transformação Get Value from JSON Variable usando variety para o campo Value.
- Certifique-se de pressionar Enter depois de digitar variety e Accept the transformation!
- Especifique Vírgula para os parâmetros Input Delimiter e Output Delimiter.
- Marque a opção Visualizar resultados
- Salvar o comando
Etapa 9: Teste o exercício
- Publicar a cadeia
- Clique em Executar e selecione Run Chain
- Depois que a cadeia for concluída,
- Clique no nó Advanced Query - Flatten JSON Object e selecione a guia Outputs (Saídas). Confirme a contagem de registros para cada iteração:
- Iteração 1: 28 registros
- Iteração 2: 5 registros
- Iteração 3: 8 registros
- Clique em Preview Results (ícone de olho) Confirme as correspondências de dados para cada iteração.
- Clique no nó Advanced Query - Flatten JSON Object e selecione a guia Outputs (Saídas). Confirme a contagem de registros para cada iteração:
Para saber mais sobre transformação de dados usando cadeias, confira Connected Learning Paths - Transformation Introduction!