Ingerir e transformar dados
04. Transformações e qualidade com Power Query, PySpark, SQL e KQL
Uma transformação correta preserva o significado dos dados enquanto muda sua forma. Escolher a função pelo nome não basta: é preciso prever quantas linhas sairão, quais valores serão mantidos e como nulos, empates e mudanças de esquema serão tratados. Esse raciocínio atravessa Power Query, PySpark, SQL e KQL.
Uma transformação correta preserva o significado dos dados enquanto muda sua forma. Escolher a função pelo nome não basta: é preciso prever quantas linhas sairão, quais valores serão mantidos e como nulos, empates e mudanças de esquema serão tratados. Esse raciocínio atravessa Power Query, PySpark, SQL e KQL.
Tipos, nulos e normalização
Tipo define operações válidas e representação. Converter um texto em número exige conhecer separador, precisão e domínio. Uma conversão tolerante pode produzir nulo em vez de interromper o fluxo, mas esses nulos precisam ser contados e investigados. Caso contrário, a técnica apenas transforma uma falha visível em perda silenciosa. Preserve o valor original quando houver necessidade de auditoria.
Nulo não é zero nem string vazia. Em SQL e Spark SQL, comparações comuns com nulo não produzem um verdadeiro simples; use os predicados apropriados, como IS NULL. Agregações como média geralmente ignoram valores nulos, alterando o denominador. Para 10, 20 e nulo, a média das observações presentes é 15; substituir o nulo por zero mudaria a pergunta e o resultado.
A normalização deve aplicar somente a equivalência autorizada. Trim remove espaços nas extremidades; retirar todos os espaços também mudaria A B para AB. Fill Down usa valores anteriores e não resolve nulos iniciais sem um valor precedente. Em PySpark, descartar linhas com any nulo difere de exigir all nulos nas colunas consideradas. Essas escolhas mudam quais registros sobrevivem.
Em PySpark, when sem otherwise pode deixar nulo para linhas que não satisfazem a condição. Isso pode ser intencional ou uma omissão que altera agregações. coalesce escolhe o primeiro valor não nulo conforme a função utilizada, mas não prova que o substituto possui o mesmo significado de negócio. withColumn pode criar ou substituir uma coluna; renomear e converter são operações distintas. Em todas elas, compare esquema e amostras de entrada e saída. Um teste deve conter valores válidos, ausentes e incompatíveis, para que o comportamento não seja inferido apenas do caso mais fácil.
Campos ausentes em Power Query
Table.SelectColumns com MissingField.Ignore omite campos ausentes; MissingField.UseNull cria a coluna com valores nulos. São contratos diferentes. Se Documento é obrigatório e deixou de chegar, produzir uma coluna totalmente nula não comprova que a origem cumpriu o contrato. Separe campos opcionais e obrigatórios e defina falha, quarentena ou alerta conforme o impacto. Em uma sequência null, A, null, B, null, Table.FillDown produz null, A, A, B, B: o primeiro nulo não tem valor anterior para herdar.
Junções, uniões e cardinalidade
Join combina linhas que satisfazem uma relação. Se uma chave aparece duas vezes em cada lado, um inner join pode produzir quatro combinações. Somar medidas depois disso pode duplicar valores sem nenhum erro técnico. Confirme a unicidade esperada das chaves e o grão antes da junção; não use DISTINCT ao final para esconder uma relação mal definida.
Left join preserva as linhas da esquerda e acrescenta correspondências; semi join seleciona linhas da esquerda que possuem correspondência; anti join seleciona as que não possuem. A direção importa: pedidos sem cliente não são o mesmo conjunto que clientes sem pedido. Filtros aplicados depois de um left join também podem eliminar linhas sem correspondência, mudando o efeito pretendido.
Union concatena conjuntos compatíveis; não é uma junção por chave. SQL UNION ALL preserva duplicatas, enquanto UNION realiza eliminação conforme sua semântica. Em PySpark, unionByName alinha colunas pelo nome, com opções explícitas para ausentes. Em KQL, union kind=inner refere-se às colunas comuns dos esquemas, e não à interseção dos registros. O operador deve ser interpretado na linguagem em uso.
Continue lendo de graça
O capítulo inteiro está liberado no plano gratuito
Criar conta leva menos de um minuto e não pede cartão. Você destrava o texto completo, o mapa mental, o PDF para estudar off-line e ainda resolve questões inéditas todo dia.
Leu o resumo? Agora pratique.
São 322 questões inéditas de Transformações e qualidade com Power Query, PySpark, SQL e KQL, todas comentadas alternativa por alternativa.
Você volta para este capítulo depois de criar a conta.
Fontes consultadas
- https://spark.apache.org/docs/latest/sql-ref-null-semantics.html
- https://learn.microsoft.com/en-us/fabric/data-engineering/delta-lake-schema-evolution
- https://learn.microsoft.com/en-us/power-query/query-folding-basics
- https://learn.microsoft.com/en-us/fabric/data-warehouse/ingest-data-tsql
- https://learn.microsoft.com/en-us/sql/t-sql/queries/select-group-by-transact-sql?view=sql-server-ver17
- https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrame.join.html
- https://learn.microsoft.com/en-us/kusto/query/join-operator?view=microsoft-fabric
- https://learn.microsoft.com/en-us/kusto/query/mv-expand-operator?view=microsoft-fabric
- https://learn.microsoft.com/en-us/sql/t-sql/queries/select-over-clause-transact-sql?view=sql-server-ver17
- https://learn.microsoft.com/en-us/kusto/query/union-operator?view=microsoft-fabric
- https://learn.microsoft.com/en-us/kusto/query/bin-function?view=microsoft-fabric
- https://learn.microsoft.com/en-us/fabric/data-factory/dataflow-gen2-data-destinations-and-managed-settings
- https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrame.exceptAll.html
- https://learn.microsoft.com/en-us/kusto/query/summarize-operator?view=microsoft-fabric
- https://learn.microsoft.com/en-us/kusto/query/parse-json-function?view=microsoft-fabric
- https://learn.microsoft.com/en-us/powerquery-m/table-transformcolumntypes
- https://learn.microsoft.com/en-us/powerquery-m/table-combine
- https://learn.microsoft.com/en-us/powerquery-m/table-filldown
- https://learn.microsoft.com/en-us/powerquery-m/table-expandtablecolumn
- https://learn.microsoft.com/en-us/powerquery-m/table-unpivotothercolumns