Compartilhar via


Mapeamento de AVRO

Use o mapeamento AVRO para mapear dados de entrada para colunas dentro de tabelas quando o arquivo de origem de ingestão estiver no formato AVRO.

Cada elemento na lista de mapeamento define o mapeamento para uma coluna específica. Esses elementos são construídos a partir de três propriedades: column, datatypee properties. Saiba mais na visão geral de mapeamentos de dados.

Cada elemento de mapeamento AVRO deve conter uma das seguintes propriedades opcionais:

Propriedade Tipo Descrição
Campo string Nome do campo no registro AVRO.
Caminho string Se o valor começar com $ , ele será interpretado como o caminho para o campo no documento AVRO que se tornará o conteúdo da coluna na tabela. O caminho que indica todo o registro AVRO é $. Se o valor não começar com $ , ele será interpretado como um valor constante. Os caminhos que incluem caracteres especiais devem ser escapados como ['Nome da Propriedade']. Para obter mais informações, consulte Sintaxe JSONPath.
ConstValue string O valor constante a ser usado para uma coluna em vez de algum valor dentro do arquivo AVRO.
Transformação string Transformação que deve ser aplicada no conteúdo com transformações de mapeamento.

Observação

Campo e Caminho são mutuamente exclusivos.

As seguintes alternativas são equivalentes:

[
  {"Column": "event_name", "Properties": {"Path": "$.EventName"}}
]
[
  {"Column": "event_name", "Properties": {"Field": "EventName"}}
]

Importante

Para ingestão na fila:

  • Se a tabela referenciada no mapeamento não existir no banco de dados, ela será criada automaticamente, considerando que os tipos de dados válidos são especificados para todas as colunas.
  • Se uma coluna referenciada no mapeamento não existir na tabela, ela será adicionada automaticamente à tabela, pois a última coluna na primeira vez que os dados são ingeridos para essa coluna, dado que um tipo de dados válido é especificado para a coluna. Para adicionar novas colunas a um mapeamento, use o comando .alter ingestion mapping.
  • Os dados são agrupados em lote usando as propriedades de Ingestão. Quanto mais propriedades de mapeamento de ingestão distintas usadas, como valores constvalue diferentes, mais fragmentada a ingestão se torna, o que pode levar à degradação do desempenho.

Exemplos

[
  {"Column": "event_timestamp", "Properties": {"Field": "Timestamp"}},
  {"Column": "event_name",      "Properties": {"Field": "Name"}},
  {"Column": "event_type",      "Properties": {"Field": "Type"}},
  {"Column": "event_time",      "Properties": {"Field": "Timestamp", "Transform": "DateTimeFromUnixMilliseconds"}},
  {"Column": "ingestion_time",  "Properties": {"ConstValue": "2021-01-01T10:32:00"}},
  {"Column": "full_record",     "Properties": {"Path": "$"}}
]

O mapeamento acima é serializado como uma cadeia de caracteres JSON quando é fornecido como parte do .ingest comando de gerenciamento.

.ingest into Table123 (@"source1", @"source2")
  with
  (
      format = "AVRO",
      ingestionMapping =
      ```
      [
        {"Column": "column_a", "Properties": {"Field": "Field1"}},
        {"Column": "column_b", "Properties": {"Field": "$.[\'Field name with space\']"}}
      ]
      ```
  )

Mapeamento pré-criado

Quando o mapeamento for pré-criado, faça referência ao mapeamento por nome no .ingest comando de gerenciamento.

.ingest into Table123 (@"source1", @"source2")
    with
    (
        format="AVRO",
        ingestionMappingReference = "Mapping_Name"
    )

Mapeamento de identidade

Use o mapeamento AVRO durante a ingestão sem definir um esquema de mapeamento (consulte mapeamento de identidade).

.ingest into Table123 (@"source1", @"source2")
    with
    (
        format="AVRO"
    )