Asignaciones de datosData mappings

Las asignaciones de datos se usan durante la ingesta para asignar datos entrantes a las columnas dentro de las tablas de Kusto.Data mappings are used during ingestion to map incoming data to columns inside Kusto tables.

Kusto admite distintos tipos de asignaciones: row-oriented (CSV, JSON y Avro) y column-oriented (parquet).Kusto supports different types of mappings, both row-oriented (CSV, JSON and AVRO), and column-oriented (Parquet).

Cada elemento de la lista de asignación se construye a partir de tres propiedades:Each element in the mapping list is constructed from three properties:

PropiedadProperty DescripciónDescription
column Nombre de la columna de destino en la tabla KustoTarget column name in the Kusto table
datatype Opta DataType con la que se creará la columna asignada si aún no existe en la tabla Kusto(Optional) Datatype with which to create the mapped column if it doesn't already exist in the Kusto table
Properties Opta Contenedor de propiedades que contiene las propiedades específicas de cada asignación, tal y como se describe en cada sección siguiente.(Optional) Property-bag containing properties specific for each mapping as described in each section below.

Todas las asignaciones se pueden crear previamente y se puede hacer referencia a ellas desde el comando de introducción mediante ingestionMappingReference parámetros.All mappings can be pre-created and can be referenced from the ingest command using ingestionMappingReference parameters.

Asignación de CSVCSV mapping

Cuando el archivo de código fuente es un CSV (o cualquier formato separado por delimitador) y su esquema no coincide con el esquema de la tabla Kusto actual, una asignación CSV se asigna desde el esquema de archivo al esquema de la tabla Kusto.When the source file is a CSV (or any delimeter-separated format) and its schema doesn't match the current Kusto table schema, a CSV mapping maps from the file schema to the Kusto table schema. Si la tabla no existe en Kusto, se creará de acuerdo con esta asignación.If the table doesn't exist in Kusto, it will be created according to this mapping. Si faltan algunos campos de la asignación en la tabla, se agregarán.If some fields in the mapping are missing in the table, they will be added.

La asignación de CSV se puede aplicar en todos los formatos separados por delimitadores: CSV, TSV, PSV, SCSV y SOHsv.CSV mapping can be applied on all the delimiter-separated formats: CSV, TSV, PSV, SCSV, and SOHsv.

Cada elemento de la lista describe una asignación para una columna específica y puede contener las siguientes propiedades:Each element in the list describes a mapping for a specific column, and may contain the following properties:

PropiedadProperty DescripciónDescription
ordinal El número de orden de la columna en CSVThe column order number in CSV
constantValue Opta Valor constante que se va a utilizar para una columna en lugar de un valor dentro del CSV.(Optional) The constant value to be used for a column instead of some value inside the CSV

Nota

Ordinal y ConstantValue se excluyen mutuamente.Ordinal and ConstantValue are mutually exclusive.

Ejemplo de asignación de CSVExample of the CSV mapping

[
  { "column" : "rownumber", "Properties":{"Ordinal":"0"}},
  { "column" : "rowguid",   "Properties":{"Ordinal":"1"}},
  { "column" : "xdouble",   "Properties":{"Ordinal":"2"}},
  { "column" : "xbool",     "Properties":{"Ordinal":"3"}},
  { "column" : "xint32",    "Properties":{"Ordinal":"4"}},
  { "column" : "xint64",    "Properties":{"Ordinal":"5"}},
  { "column" : "xdate",     "Properties":{"Ordinal":"6"}},
  { "column" : "xtext",     "Properties":{"Ordinal":"7"}},
  { "column" : "const_val", "Properties":{"ConstValue":"Sample: constant value"}}
]

Nota

Cuando se proporciona la asignación anterior como parte del .ingest comando de control, se serializa como una cadena JSON.When the mapping above is provided as part of the .ingest control command it is serialized as a JSON string.

.ingest into Table123 (@"source1", @"source2")
    with 
    (
        format="csv", 
        ingestionMapping = 
        "["
            "{\"column\":\"rownumber\",\"Properties\":{\"Ordinal\":0}},"
            "{\"column\":\"rowguid\",  \"Properties\":{\"Ordinal\":1}}"
        "]" 
    )

Nota

Cuando se crea previamente la asignación anterior, se puede hacer referencia a ella en el .ingest comando de control:When the mapping above is pre-created it can be referenced in the .ingest control command:

.ingest into Table123 (@"source1", @"source2")
    with 
    (
        format="csv", 
        ingestionMappingReference = "Mapping1"
    )

Nota

El siguiente formato de asignación, sin la Properties bolsa de propiedades, está en desuso.The following mapping format, without the Properties property-bag, is deprecated.

.ingest into Table123 (@"source1", @"source2")
    with 
    (
        format="csv", 
        ingestionMapping = 
        "["
            "{\"column\":\"rownumber\",\"Ordinal\": 0},"
            "{\"column\":\"rowguid\",  \"Ordinal\": 1}"
        "]" 
    )

Asignación de JSONJSON mapping

Cuando el archivo de código fuente está en formato JSON, el contenido del archivo se asigna a la tabla Kusto.When the source file is in JSON format, the file content is mapped to the Kusto table. La tabla debe existir en la base de datos Kusto a menos que se especifique un tipo de datos válido para todas las columnas asignadas.The table must exist in the Kusto database unless a valid datatype is specified for all the columns mapped. Las columnas asignadas en la asignación JSON deben existir en la tabla Kusto a menos que se especifique un tipo de usuario para todas las columnas que no existen.The columns mapped in the JSON mapping must exist in the Kusto table unless a datatype is specified for all the non-existing columns.

Cada elemento de la lista describe una asignación para una columna específica y puede contener las siguientes propiedades:Each element in the list describes a mapping for a specific column, and may contain the following properties:

PropiedadProperty DescripciónDescription
path Si comienza por $ : ruta de acceso JSON al campo que se convertirá en el contenido de la columna del documento JSON (la ruta de acceso JSON que denota todo el documento es $ ).If starts with $: JSON path to the field that will become the content of the column in the JSON document (JSON path that denotes the entire document is $). Si el valor no se inicia con $ : se utiliza un valor constante.If the value does not start with $: a constant value is used. Las rutas de acceso JSON que incluyen espacios en blanco se deben escapar como [ ' nombre de propiedad ' ].JSON paths that include white-spaces should be escaped as ['Property Name'].
transform Opta Transformación que se debe aplicar en el contenido con transformaciones de asignación.(Optional) Transformation that should be applied on the content with mapping transformations.

Ejemplo de asignación de JSONExample of JSON mapping

[
  { "column" : "rownumber",   "Properties":{"Path":"$.rownumber"}}, 
  { "column" : "rowguid",     "Properties":{"Path":"$.rowguid"}}, 
  { "column" : "xdouble",     "Properties":{"Path":"$.xdouble"}}, 
  { "column" : "xbool",       "Properties":{"Path":"$.xbool"}}, 
  { "column" : "xint32",      "Properties":{"Path":"$.xint32"}}, 
  { "column" : "xint64",      "Properties":{"Path":"$.xint64"}}, 
  { "column" : "xdate",       "Properties":{"Path":"$.xdate"}}, 
  { "column" : "xtext",       "Properties":{"Path":"$.xtext"}}, 
  { "column" : "location",    "Properties":{"transform":"SourceLocation"}}, 
  { "column" : "lineNumber",  "Properties":{"transform":"SourceLineNumber"}}, 
  { "column" : "full_record", "Properties":{"Path":"$"}}
]

Nota

Cuando se proporciona la asignación anterior como parte del .ingest comando de control, se serializa como una cadena JSON.When the mapping above is provided as part of the .ingest control command it is serialized as JSON string.

.ingest into Table123 (@"source1", @"source2") 
  with 
  (
      format = "json", 
      ingestionMapping = 
      "["
        "{\"column\":\"rownumber\",\"Properties\":{\"Path\":\"$.rownumber\"}},"
        "{\"column\":\"rowguid\",  \"Properties\":{\"Path\":\"$.rowguid\"}}",
        "{\"column\":\"custom_column\",  \"Properties\":{\"Path\":\"$.[\'property name with space\']\"}}"
      "]"
  )

Nota

Cuando se crea previamente la asignación anterior, se puede hacer referencia a ella en el .ingest comando de control:When the mapping above is pre-created it can be referenced in the .ingest control command:

.ingest into Table123 (@"source1", @"source2")
    with 
    (
        format="json", 
        ingestionMappingReference = "Mapping1"
    )

Nota

El siguiente formato de asignación, sin la Properties bolsa de propiedades, está en desuso.The following mapping format, without the Properties property-bag, is deprecated.

.ingest into Table123 (@"source1", @"source2") 
  with 
  (
      format = "json", 
      ingestionMapping = 
      "["
        "{\"column\":\"rownumber\",\"path\":\"$.rownumber\"},"
        "{\"column\":\"rowguid\",  \"path\":\"$.rowguid\"}"
      "]"
  )

Asignación de AvroAvro mapping

Cuando el archivo de código fuente está en formato Avro, el contenido del archivo Avro se asigna a la tabla Kusto.When the source file is in Avro format, the Avro file content is mapped to the Kusto table. La tabla debe existir en la base de datos Kusto a menos que se especifique un tipo de datos válido para todas las columnas asignadas.The table must exist in the Kusto database unless a valid datatype is specified for all the columns mapped. Las columnas asignadas en la asignación de Avro deben existir en la tabla Kusto a menos que se especifique un tipo de usuario para todas las columnas no existentes.The columns mapped in the Avro mapping must exist in the Kusto table unless a datatype is specified for all the non-existing columns.

Cada elemento de la lista describe una asignación para una columna específica y puede contener las siguientes propiedades:Each element in the list describes a mapping for a specific column, and may contain the following properties:

PropiedadProperty DescripciónDescription
Field Nombre del campo en el registro Avro.The name of the field in the Avro record.
Path Alternativa al uso field de que permite tomar la parte interna de un campo de registro de Avro, si es necesario.Alternative to using field which allows taking the inner part of an Avro record-field, if necessary. El valor denota una ruta de acceso JSON de la raíz del registro.The value denotes a JSON-path from the root of the record. Vea las notas siguientes para obtener más información.See the Notes below for more information. Las rutas de acceso JSON que incluyen espacios en blanco se deben escapar como [ ' nombre de propiedad ' ].JSON paths that include white-spaces should be escaped as ['Property Name'].
transform Opta Transformación que se debe aplicar en el contenido con transformaciones admitidas.(Optional) Transformation that should be applied on the content with supported transformations.

NotasNotes

Nota

  • field y path no se pueden usar juntos, solo se permite uno.field and path cannot be used together,only one is allowed.
  • path no puede apuntar solo a la raíz $ , debe tener al menos un nivel de ruta de acceso.path cannot point to root $ only, it must have at least one level of path.

Las dos alternativas siguientes son iguales:The two alternatives below are equal:

[
  {"column": "rownumber", "Properties":{"Path":"$.RowNumber"}}
]
[
  {"column": "rownumber", "Properties":{"Field":"RowNumber"}}
]

Ejemplo de la asignación de AVROExample of the AVRO mapping

[
  {"column": "rownumber", "Properties":{"Field":"rownumber"}},
  {"column": "rowguid",   "Properties":{"Field":"rowguid"}},
  {"column": "xdouble",   "Properties":{"Field":"xdouble"}},
  {"column": "xboolean",  "Properties":{"Field":"xboolean"}},
  {"column": "xint32",    "Properties":{"Field":"xint32"}},
  {"column": "xint64",    "Properties":{"Field":"xint64"}},
  {"column": "xdate",     "Properties":{"Field":"xdate"}},
  {"column": "xtext",     "Properties":{"Field":"xtext"}}
]

Nota

Cuando se proporciona la asignación anterior como parte del .ingest comando de control, se serializa como una cadena JSON.When the mapping above is provided as part of the .ingest control command it is serialized as JSON string.

.ingest into Table123 (@"source1", @"source2") 
  with 
  (
      format = "avro", 
      ingestionMapping = 
      "["
        "{\"column\":\"rownumber\",\"Properties\":{\"Path\":\"$.rownumber\"}},"
        "{\"column\":\"rowguid\",  \"Properties\":{\"Path\":\"$.rowguid\"}}"
      "]"
  )

Nota

Cuando se crea previamente la asignación anterior, se puede hacer referencia a ella en el .ingest comando de control:When the mapping above is pre-created it can be referenced in the .ingest control command:

.ingest into Table123 (@"source1", @"source2")
    with 
    (
        format="avro", 
        ingestionMappingReference = "Mapping1"
    )

Nota

El siguiente formato de asignación, sin la Properties bolsa de propiedades, está en desuso.The following mapping format, without the Properties property-bag, is deprecated.

.ingest into Table123 (@"source1", @"source2") 
  with 
  (
      format = "avro", 
      ingestionMapping = 
      "["
        "{\"column\":\"rownumber\",\"field\":\"rownumber\"},"
        "{\"column\":\"rowguid\",  \"field\":\"rowguid\"}"
      "]"
  )

Asignación de parquetParquet mapping

Cuando el archivo de código fuente está en formato parquet, el contenido del archivo se asigna a la tabla Kusto.When the source file is in Parquet format, the file content is mapped to the Kusto table. La tabla debe existir en la base de datos Kusto a menos que se especifique un tipo de datos válido para todas las columnas asignadas.The table must exist in the Kusto database unless a valid datatype is specified for all the columns mapped. Las columnas asignadas en la asignación parquet deben existir en la tabla Kusto, a menos que se especifique un tipo de usuario para todas las columnas no existentes.The columns mapped in the Parquet mapping must exist in the Kusto table unless a datatype is specified for all the non-existing columns.

Cada elemento de la lista describe una asignación para una columna específica y puede contener las siguientes propiedades:Each element in the list describes a mapping for a specific column, and may contain the following properties:

PropiedadProperty DescripciónDescription
path Si comienza por $ : ruta de acceso JSON al campo que se convertirá en el contenido de la columna en el documento parquet (la ruta de acceso JSON que denota todo el documento es $ ).If starts with $: JSON path to the field that will become the content of the column in the Parquet document (JSON path that denotes the entire document is $). Si el valor no se inicia con $ : se utiliza un valor constante.If the value does not start with $: a constant value is used. Las rutas de acceso JSON que incluyen espacios en blanco se deben escapar como [ ' nombre de propiedad ' ].JSON paths that include white-spaces should be escaped as ['Property Name'].
transform Opta asignación de transformaciones que se deben aplicar en el contenido.(Optional) mapping transformations that should be applied on the content.

Ejemplo de asignación parquetExample of the Parquet mapping

[
  { "column" : "rownumber",   "Properties":{"Path":"$.rownumber"}}, 
  { "column" : "xdouble",     "Properties":{"Path":"$.xdouble"}}, 
  { "column" : "xbool",       "Properties":{"Path":"$.xbool"}}, 
  { "column" : "xint64",      "Properties":{"Path":"$.xint64"}}, 
  { "column" : "xdate",       "Properties":{"Path":"$.xdate"}}, 
  { "column" : "xtext",       "Properties":{"Path":"$.xtext"}}, 
  { "column" : "location",    "Properties":{"transform":"SourceLocation"}}, 
  { "column" : "lineNumber",  "Properties":{"transform":"SourceLineNumber"}}, 
  { "column" : "full_record", "Properties":{"Path":"$"}}
]

Nota

Cuando se proporciona la asignación anterior como parte del .ingest comando de control, se serializa como una cadena JSON.When the mapping above is provided as part of the .ingest control command it is serialized as a JSON string.

.ingest into Table123 (@"source1", @"source2") 
  with 
  (
      format = "parquet", 
      ingestionMapping = 
      "["
        "{\"column\":\"rownumber\",\"Properties\":{\"Path\":\"$.rownumber\"}},"
        "{\"column\":\"rowguid\",  \"Properties\":{\"Path\":\"$.rowguid\"}}",
        "{\"column\":\"custom_column\",  \"Properties\":{\"Path\":\"$.[\'property name with space\']\"}}"
      "]"
  )

Nota

Cuando se crea previamente la asignación anterior, se puede hacer referencia a ella en el .ingest comando de control:When the mapping above is pre-created it can be referenced in the .ingest control command:

.ingest into Table123 (@"source1", @"source2")
    with 
    (
        format="parquet", 
        ingestionMappingReference = "Mapping1"
    )

Asignación de ORCOrc mapping

Cuando el archivo de código fuente está en formato ORC, el contenido del archivo se asigna a la tabla Kusto.When the source file is in Orc format, the file content is mapped to the Kusto table. La tabla debe existir en la base de datos Kusto a menos que se especifique un tipo de datos válido para todas las columnas asignadas.The table must exist in the Kusto database unless a valid datatype is specified for all the columns mapped. Las columnas asignadas en la asignación Orc deben existir en la tabla Kusto, a menos que se especifique un tipo de usuario para todas las columnas no existentes.The columns mapped in the Orc mapping must exist in the Kusto table unless a datatype is specified for all the non-existing columns.

Cada elemento de la lista describe una asignación para una columna específica y puede contener las siguientes propiedades:Each element in the list describes a mapping for a specific column, and may contain the following properties:

PropiedadProperty DescripciónDescription
path Si comienza por $ : ruta de acceso JSON al campo que se convertirá en el contenido de la columna en el documento ORC (la ruta de acceso JSON que denota todo el documento es $ ).If starts with $: JSON path to the field that will become the content of the column in the Orc document (JSON path that denotes the entire document is $). Si el valor no se inicia con $ : se utiliza un valor constante.If the value does not start with $: a constant value is used. Las rutas de acceso JSON que incluyen espacios en blanco se deben escapar como [ ' nombre de propiedad ' ].JSON paths that include white-spaces should be escaped as ['Property Name'].
transform Opta asignación de transformaciones que se deben aplicar en el contenido.(Optional) mapping transformations that should be applied on the content.

Ejemplo de asignación de ORCExample of Orc mapping

[
  { "column" : "rownumber",   "Properties":{"Path":"$.rownumber"}}, 
  { "column" : "xdouble",     "Properties":{"Path":"$.xdouble"}}, 
  { "column" : "xbool",       "Properties":{"Path":"$.xbool"}}, 
  { "column" : "xint64",      "Properties":{"Path":"$.xint64"}}, 
  { "column" : "xdate",       "Properties":{"Path":"$.xdate"}}, 
  { "column" : "xtext",       "Properties":{"Path":"$.xtext"}}, 
  { "column" : "location",    "Properties":{"transform":"SourceLocation"}}, 
  { "column" : "lineNumber",  "Properties":{"transform":"SourceLineNumber"}}, 
  { "column" : "full_record", "Properties":{"Path":"$"}}
]

Nota

Cuando se proporciona la asignación anterior como parte del .ingest comando de control, se serializa como una cadena JSON.When the mapping above is provided as part of the .ingest control command it is serialized as a JSON string.

.ingest into Table123 (@"source1", @"source2") 
  with 
  (
      format = "orc", 
      ingestionMapping = 
      "["
        "{\"column\":\"rownumber\",\"Properties\":{\"Path\":\"$.rownumber\"}},"
        "{\"column\":\"rowguid\",  \"Properties\":{\"Path\":\"$.rowguid\"}}",
        "{\"column\":\"custom_column\",  \"Properties\":{\"Path\":\"$.[\'property name with space\']\"}}"
      "]"
  )

Nota

Cuando se crea previamente la asignación anterior, se puede hacer referencia a ella en el .ingest comando de control:When the mapping above is pre-created it can be referenced in the .ingest control command:

.ingest into Table123 (@"source1", @"source2")
    with 
    (
        format="orc", 
        ingestionMappingReference = "Mapping1"
    )

Asignación de transformacionesMapping transformations

Algunas de las asignaciones de formato de datos (parquet, JSON y Avro) admiten transformaciones de tiempo de ingesta sencillas y útiles.Some of the data format mappings (Parquet, JSON and Avro) support simple and useful ingest-time transformations. Si el escenario requiere un procesamiento más complejo en el momento de la ingesta, use actualizar directiva, que permite definir el procesamiento ligero mediante la expresión de KQL.Where the scenario requires more complex processing at ingest time, use Update policy, which allows defining lightweight processing using KQL expression.

Transformación dependiente de la ruta de accesoPath-dependant transformation DescripciónDescription CondicionesConditions
PropertyBagArrayToDictionary Transforma una matriz JSON de propiedades (por ejemplo, {eventos: [{"N1": "v1"}, {"N2": "V2"}]}) al diccionario y lo serializa en un documento JSON válido (por ejemplo, {"N1": "v1", "N2": "V2"}).Transforms JSON array of properties (e.g. {events:[{"n1":"v1"},{"n2":"v2"}]}) to dictionary and serializes it to valid JSON document (for example, {"n1":"v1","n2":"v2"}). Solo se puede aplicar cuando path se usaCan be applied only when path is used
SourceLocation Nombre del artefacto de almacenamiento que proporcionó los datos, tipo cadena (por ejemplo, el campo "BaseUri" del BLOB).Name of the storage artifact that provided the data, type string (for example, the blob's "BaseUri" field).
SourceLineNumber Desplazamiento con respecto a ese artefacto de almacenamiento, tipo Long (a partir de ' 1 ' y incremento por registro nuevo).Offset relative to that storage artifact, type long (starting with '1' and incrementing per new record).
DateTimeFromUnixSeconds Convierte el número que representa el tiempo de UNIX (segundos desde 1970-01-01) en una cadena de fecha y hora UTCConverts number representing unix-time (seconds since 1970-01-01) to UTC datetime string
DateTimeFromUnixMilliseconds Convierte el número que representa el tiempo de UNIX (en milisegundos desde 1970-01-01) en una cadena de fecha y hora UTCConverts number representing unix-time (milliseconds since 1970-01-01) to UTC datetime string
DateTimeFromUnixMicroseconds Convierte el número que representa el tiempo de UNIX (en microsegundos desde 1970-01-01) en una cadena de fecha y hora UTC.Converts number representing unix-time (microseconds since 1970-01-01) to UTC datetime string
DateTimeFromUnixNanoseconds Convierte el número que representa el tiempo de UNIX (nanosegundos desde 1970-01-01) en una cadena de fecha y hora UTC.Converts number representing unix-time (nanoseconds since 1970-01-01) to UTC datetime string