Crea un archivo de definición de tablas para una fuente de datos externa

En esta página, se describe cómo crear un archivo de definición de tablas para una fuente de datos externa. Una fuente de datos externa es una fuente de datos que puedes consultar directamente, aunque los datos no estén almacenados en BigQuery.

En un archivo de definición de tablas, se incluye una definición de esquema de tabla externa y metadatos, como el formato de datos de la tabla y las propiedades relacionadas. Cuando creas un archivo de definición de tablas, puedes usar la detección automática de esquemas a fin de definir el esquema para una fuente de datos externa. Puedes proporcionar el esquema intercalado o puedes proporcionar un archivo JSON que contenga la definición del esquema.

Los archivos de definición de tablas se usan con la herramienta de línea de comandos de bq. Las propiedades de un archivo de definición de tablas también se aplican a la creación de una ExternalDataConfiguration cuando usas la API de REST. No uses archivos de definición de tablas cuando crees una tabla externa mediante la consola de Google Cloud.

Puedes crear archivos de definición de tablas a fin de describir una tabla externa permanente o temporal para las siguientes fuentes de datos externas:

  • Cloud Storage

    • Valores separados por comas (CSV)
    • JSON delimitado por saltos de línea
    • Archivos Avro
    • Archivos de exportación de Datastore
    • Archivos ORC
    • Archivos Parquet
    • Archivos de exportación de Firestore
  • Google Drive

    • Valores separados por comas (CSV)
    • JSON delimitado por saltos de línea
    • Archivos Avro
    • Hojas de cálculo de Google
  • Bigtable

Antes de comenzar

A fin de crear un archivo de definición de tablas, necesitas el URI para la fuente de datos:

Crea un archivo de definición para archivos CSV, JSON o de Hojas de cálculo de Google

Usa uno de los siguientes métodos a fin de crear un archivo de definición de tablas para archivos CSV, JSON o de Hojas de cálculo de Google en Cloud Storage o Drive:

Usa la marca autodetect

Si especificas un archivo CSV, JSON o de Hojas de cálculo de Google sin incluir una descripción del esquema intercalado o un archivo de esquema, puedes usar la marca --autodetect para configurar la opción "autodetect" como true en el archivo de definición de tablas. Cuando la detección automática está habilitada, en BigQuery se hace un esfuerzo para inferir automáticamente el esquema. Si deseas obtener más información, consulta Detección automática del esquema para fuentes de datos externas.

Usa la detección automática con una fuente de datos de Cloud Storage

Crea un archivo de definición de tablas para una fuente de datos de Cloud Storage:

  1. Usa el comando bq mkdef con la marca --autodetect para crear un archivo de definición de tablas. Con el comando mkdef, se genera un archivo de definición de tablas en formato JSON. En el ejemplo siguiente, se crea una definición de tablas y se escribe el resultado en un archivo: /tmp/file_name.

    bq mkdef \
      --autodetect \
      --source_format=SOURCE_FORMAT \
      "URI" > /tmp/FILE_NAME
    

    Reemplaza lo siguiente:

    • SOURCE_FORMAT: el formato de archivo
    • FILE_NAME: el nombre de tu archivo de definición de tablas
    • URI: el URI de Cloud Storage

      Por ejemplo, gs://mybucket/myfile.

  2. Opcional: Abre el archivo de definición de tablas en un editor de texto. Por ejemplo, con el comando nano /tmp/file_name, se abre el archivo en nano. El archivo debe verse de la manera siguiente para una fuente de datos externa CSV. Observa que "autodetect" se estableció en true.

    {
    "autodetect": true,
    "csvOptions": {
      "allowJaggedRows": false,
      "allowQuotedNewlines": false,
      "encoding": "UTF-8",
      "fieldDelimiter": ",",
      "quote": "\"",
      "skipLeadingRows": 0
    },
    "sourceFormat": "CSV",
    "sourceUris": [
      "URI"
    ]
    }
    
  3. Opcional: Edita manualmente el archivo de definición de tablas para modificar, agregar o borrar configuraciones generales como maxBadRecords y ignoreUnknownValues. No existen opciones de configuración específicas para los archivos fuente JSON, pero hay configuraciones que se aplican a los archivos CSV y de Hojas de cálculo de Google. Para obtener más información, consulta ExternalDataConfiguration en la referencia de la API.

Usa la detección automática con una fuente de datos de Drive

Crea un archivo de definición de tablas para una fuente de datos de Drive:

  1. Usa el comando bq mkdef con la marca --autodetect para crear una definición de tabla. Con el comando mkdef, se genera un archivo de definición de tablas en formato JSON. En el ejemplo siguiente, se crea una definición de tablas y se escribe el resultado en un archivo: /tmp/file_name.

    bq mkdef \
       --autodetect \
       --source_format=SOURCE_FORMAT \
       "URI" > /tmp/FILE_NAME
    

    Reemplaza lo siguiente:

    • SOURCE_FORMAT: el formato de archivo
    • FILE_NAME: el nombre de tu archivo de definición de tablas
    • URI: el URI de Drive

      Por ejemplo, https://drive.google.com/open?id=123ABCD123AbcD123Abcd.

  2. Abre el archivo de definición de tablas en un editor de texto. Por ejemplo, con el comando nano /tmp/file_name, se abre el archivo en nano. El archivo debe verse de la manera siguiente para una fuente de datos externa de Hojas de cálculo de Google. Observa que "autodetect" se configuró como true.

    {
    "autodetect": true,
    "sourceFormat": "GOOGLE_SHEETS",
    "sourceUris": [
      "URI"
    ]
    }
    
  3. Opcional: Edita manualmente el archivo de definición de tablas para modificar, agregar o borrar configuraciones generales como maxBadRecords y ignoreUnknownValues. No existen opciones de configuración específicas para los archivos fuente JSON, pero hay configuraciones que se aplican a los archivos CSV y de Hojas de cálculo de Google. Para obtener más información, consulta ExternalDataConfiguration en la referencia de la API.

  4. Para especificar una hoja en particular o un rango de celdas en un archivo de Hojas de cálculo de Google, agrega la propiedad range al archivo de definición de tablas. Para consultar una hoja en particular, especifica el nombre de la hoja. Para consultar un rango de celdas, especifica el rango en el formato siguiente: sheet_name!top_left_cell_id:bottom_right_cell_id, por ejemplo, "Sheet1!A1:B20". Si no se especifica el parámetro range, se usará la primera hoja del archivo.

Usa un esquema intercalado

Si no deseas utilizar la detección automática de esquemas, puedes crear un archivo de definición de tablas; para ello, proporciona una definición de esquema intercalado. Para proporcionar una definición de esquema intercalado, crea una lista de los campos y tipos de datos en la línea de comandos en el formato siguiente: FIELD:DATA_TYPE,FIELD:DATA_TYPE.

Usa un esquema intercalado con una fuente de datos de Cloud Storage o Drive

Crea una definición de tablas para una fuente de datos de Cloud Storage o Drive mediante una definición de esquema intercalado:

  1. Usa el comando bq mkdef con la marca --noautodetect para crear una definición de tabla. Con el comando mkdef, se genera un archivo de definición de tablas en formato JSON. En el ejemplo siguiente, se crea una definición de tablas y se escribe el resultado en un archivo: /tmp/file_name.

    bq mkdef \
      --noautodetect \
      --source_format=SOURCE_FORMAT \
      "URI" \
      FIELD:DATA_TYPE,FIELD:DATA_TYPE > /tmp/FILE_NAME
    

    Reemplaza lo siguiente:

    • SOURCE_FORMAT: el formato de archivo de origen
    • URI: el URI de Cloud Storage o tu URI de Drive.

      Por ejemplo, gs://mybucket/myfile para Cloud Storage o https://drive.google.com/open?id=123ABCD123AbcD123Abcd para Drive.

    • FIELD:DATA_TYPE,FIELD:DATA_TYPE: es la definición de esquema

      Por ejemplo, Name:STRING,Address:STRING, ....

    • FILE_NAME: el nombre de tu archivo de definición de tablas

  2. Opcional: Abre el archivo de definición de tablas en un editor de texto. Por ejemplo, con el comando nano /tmp/file_name, se abre el archivo en nano. El archivo debe verse de la manera siguiente. Ten en cuenta que "autodetect" no está habilitada y que la información del esquema se escribe en el archivo de definición de tablas.

    {
    "schema": {
      "fields": [
        {
          "name": "FIELD",
          "type": "DATA_TYPE"
        },
        {
          "name": "FIELD",
          "type": "DATA_TYPE"
        }
        ...
      ]
    },
    "sourceFormat": "NEWLINE_DELIMITED_JSON",
    "sourceUris": [
      "URI"
    ]
    }
    
  3. Opcional: Edita manualmente el archivo de definición de tablas para modificar, agregar o borrar configuraciones generales como maxBadRecords y ignoreUnknownValues. No existen opciones de configuración específicas para los archivos fuente JSON, pero hay configuraciones que se aplican a los archivos CSV y de Hojas de cálculo de Google. Para obtener más información, consulta ExternalDataConfiguration en la referencia de la API.

Usa un archivo de esquema JSON

Si no deseas usar la detección automática ni proporcionar una definición de esquema intercalado, puedes crear un archivo de esquema JSON y hacer referencia a él cuando crees tu archivo de definición de tablas. Crea el archivo de esquema JSON de forma manual en tu máquina local. No se admite la referencia a un archivo de esquema JSON almacenado en Cloud Storage o en Google Drive.

Usa un archivo de esquema con una fuente de datos de Cloud Storage

Crea una definición de tabla para una fuente de datos de Cloud Storage mediante un archivo de esquema JSON:

  1. Usa el comando bq mkdef con la marca --noautodetect para crear una definición de tabla. Con el comando mkdef, se genera un archivo de definición de tablas en formato JSON. En el ejemplo siguiente, se crea una definición de tablas y se escribe el resultado en un archivo: /tmp/file_name.

    bq mkdef \
       --noautodetect \
       --source_format=SOURCE_FORMAT \
       "URI" \
      PATH_TO_SCHEMA_FILE > /tmp/FILE_NAME
    

    Reemplaza lo siguiente:

    • SOURCE_FORMAT: el formato de archivo
    • FILE_NAME: el nombre de tu archivo de definición de tablas
    • URI: el URI de Cloud Storage

      Por ejemplo, gs://mybucket/myfile.

    • PATH_TO_SCHEMA_FILE: la ubicación del archivo de esquema JSON en tu máquina local

  2. Opcional: Abre el archivo de definición de tablas en un editor de texto. Por ejemplo, con el comando nano /tmp/file_name, se abre el archivo en
    nano. El archivo debe verse de la manera siguiente. Ten en cuenta que "autodetect" no está habilitada y que la información del esquema se escribe en el archivo de definición de tablas.

    {
    "schema": {
      "fields": [
        {
          "name": "FIELD",
          "type": "DATA_TYPE"
        },
        {
          "name": "FIELD",
          "type": "DATA_TYPE"
        }
        ...
      ]
    },
    "sourceFormat": "NEWLINE_DELIMITED_JSON",
    "sourceUris": [
      "URI"
    ]
    }
    
  3. Opcional: Edita manualmente el archivo de definición de tablas para modificar, agregar o borrar configuraciones generales como maxBadRecords y ignoreUnknownValues. No existen opciones de configuración específicas para los archivos fuente JSON, pero hay configuraciones que se aplican a los archivos CSV y de Hojas de cálculo de Google. Para obtener más información, consulta ExternalDataConfiguration en la referencia de la API.

Usa un archivo de esquema con una fuente de datos de Drive

Crea una definición de tablas para una fuente de datos de Drive mediante un archivo de esquema JSON:

  1. Usa el comando bq mkdef con la marca --noautodetect para crear una definición de tabla. Con el comando mkdef, se genera un archivo de definición de tablas en formato JSON. En el ejemplo siguiente, se crea una definición de tablas y se escribe el resultado en un archivo: /tmp/file_name.

    bq mkdef \
       --noautodetect \
       --source_format=source_format \
       "URI" \
       PATH_TO_SCHEMA_FILE > /tmp/FILE_NAME
    

    Reemplaza lo siguiente:

    • SOURCE_FORMAT: el formato de archivo de origen
    • URI: el URI de Drive

      Por ejemplo, https://drive.google.com/open?id=123ABCD123AbcD123Abcd.

    • PATH_TO_SCHEMA_FILE: la ubicación del archivo de esquema JSON en tu máquina local

    • FILE_NAME: el nombre de tu archivo de definición de tablas

  2. Abre el archivo de definición de tablas en un editor de texto. Por ejemplo, con el comando nano /tmp/file_name, se abre el archivo en nano. El archivo debe verse de la manera siguiente. Ten en cuenta que "autodetect" no está habilitada y que la información del esquema se escribe en el archivo de definición de tablas.

    {
    "schema": {
      "fields": [
        {
          "name": "FIELD",
          "type": "DATA_TYPE"
        },
        {
          "name": "FIELD",
          "type": "DATA_TYPE"
        }
        ...
      ]
    },
    "sourceFormat": "GOOGLE_SHEETS",
    "sourceUris": [
      "URI"
    ]
    }
    
  3. Opcional: Edita manualmente el archivo de definición de tablas para modificar, agregar o borrar configuraciones generales como maxBadRecords y ignoreUnknownValues. No existen opciones de configuración específicas para los archivos fuente JSON, pero hay configuraciones que se aplican a los archivos CSV y de Hojas de cálculo de Google. Para obtener más información, consulta ExternalDataConfiguration en la referencia de la API.

  4. Para especificar una hoja en particular o un rango de celdas en un archivo de Hojas de cálculo de Google, agrega la propiedad range al archivo de definición de tablas. Para consultar una hoja en particular, especifica el nombre de la hoja. Para consultar un rango de celdas, especifica el rango en el formato siguiente: sheet_name!top_left_cell_id:bottom_right_cell_id, por ejemplo, "Sheet1!A1:B20". Si no se especifica el parámetro range, se usará la primera hoja del archivo.

Crea un archivo de definición para formatos autodescriptivos

Avro, Parquet y ORC son formatos de descripción automática. Los archivos de datos en estos formatos contienen su propia información de esquema. Si usas uno de estos formatos como fuente de datos externa, BigQuery recuperará de forma automática el esquema mediante los datos de origen. Cuando creas una definición de tablas, no necesitas usar la detección automática de esquemas ni proporcionar una definición de esquema intercalado ni un archivo de esquema.

Puedes crear un archivo de definición de tablas para los datos de Avro, Parquet u ORC almacenados en Cloud Storage o Drive.

  1. Usa el comando bq mkdef para crear una tabla permanente.

    bq mkdef \
        --source_format=FORMAT \
        "URI" > FILE_NAME
    

    Reemplaza lo siguiente:

    • FORMAT: el formato de origen

    • URI: el URI de Cloud Storage o tu URI de Drive.

      Por ejemplo, gs://mybucket/myfile para Cloud Storage o https://drive.google.com/open?id=123ABCD123AbcD123Abcd para Drive.

    • FILE_NAME: el nombre de tu archivo de definición de tablas

  2. Opcional: Abre el archivo de definición de tablas en un editor de texto. El archivo es similar al siguiente:

    {
       "sourceFormat": "AVRO",
       "sourceUris": [
       "URI"
        ]
    }
    
  3. Opcional: Edita manualmente el archivo de definición de tablas para modificar, agregar o borrar configuraciones generales como maxBadRecords y ignoreUnknownValues. Para obtener más información, consulta ExternalDataConfiguration en la referencia de la API.

Crea un archivo de definición para datos con partición de subárbol

Usa el comando bq mkdef con las marcas hive_partitioning_mode y hive_partitioning_source_uri_prefix para crear un archivo de definición para datos con partición de subárbol que se almacene en Cloud Storage, Amazon Simple Storage Service (Amazon S3) o Azure Blob Storage.

Crea un archivo de definición para Datastore y Firestore

Si usas una exportación de Datastore o Firestore como fuente de datos externa, BigQuery recupera de forma automática el esquema mediante los datos de fuente autodescriptivos. Cuando creas una definición de tablas, no necesitas proporcionar una definición de esquema intercalado ni un archivo de esquema.

Puedes crear un archivo de definición de tablas para los datos de exportación de Datastore y Firestore almacenados en Cloud Storage:

  1. Usa el comando bq mkdef para crear una tabla permanente. No es necesario usar la marca --noautodetect con los archivos de copia de seguridad de Datastore o Firestore. La detección automática de esquemas está inhabilitada para estos tipos de archivos. Con el comando mkdef, se genera un archivo de definición de tablas en formato JSON. En el ejemplo siguiente, se crea una definición de tablas y se escribe el resultado en un archivo: /tmp/file_name.

    bq mkdef \
    --source_format=DATASTORE_BACKUP \
    "URI" > /tmp/FILE_NAME
    

    Reemplaza lo siguiente:

    El formato de origen DATASTORE_BACKUP se usa para Datastore y Firestore.

  2. Opcional: Abre el archivo de definición de tablas en un editor de texto. Por ejemplo, con el comando nano /tmp/file_name, se abre el archivo en nano. El archivo debe verse de la manera siguiente. Ten en cuenta que no es necesaria la configuración de "autodetect".

    {
    "sourceFormat": "DATASTORE_BACKUP",
    "sourceUris": [
      "gs://URI"
    ]
    }
    
  3. Opcional: Edita manualmente el archivo de definición de tablas para modificar, agregar o borrar configuraciones como maxBadRecords y ignoreUnknownValues. No existen opciones de configuración específicas para los archivos de exportación de Datastore y Firestore. Para obtener más información, consulta ExternalDataConfiguration en la referencia de la API.

Crea un archivo de definición para Bigtable

Cuando creas un archivo de definición de tablas para Cloud Bigtable, genera manualmente el archivo en formato JSON. Actualmente, no se admite el uso del comando mkdef a fin de crear una definición de tablas para las fuentes de datos de Bigtable. La detección automática de esquemas tampoco es compatible con Bigtable. Para obtener una lista de las opciones de definición de tablas de Bigtable, consulta BigtableOptions en la referencia de la API de REST.

Un archivo de definición de tablas JSON para Bigtable se parece al ejemplo siguiente. Mediante este archivo de definición de tablas, en BigQuery se leen los datos de una sola familia de columnas y se interpretan los valores como números enteros codificados binarios.

{
    "sourceFormat": "BIGTABLE",
    "sourceUris": [
        "https://googleapis.com/bigtable/projects/PROJECT_ID/instances/INSTANCE_ID/tables/TABLE_NAME"
    ],
    "bigtableOptions": {
        "columnFamilies" : [
            {
                "familyId": "FAMILY_ID",
                "type": "INTEGER",
                "encoding": "BINARY"
            }
        ]
    }
}

Reemplaza lo siguiente:

  • PROJECT_ID: Es el proyecto que contiene el clúster de Bigtable.
  • INSTANCE_ID: Es el ID de la instancia de Bigtable.
  • TABLE_NAME: Es el nombre de la tabla que deseas consultar.
  • FAMILY_ID: Es el identificador de la familia de columnas.

Si deseas obtener más información, consulta Recupera el URI de Bigtable.

Compatibilidad con comodines para los archivos de definición de tablas

Si los datos se separan en varios archivos, puedes usar un asterisco (*) para seleccionar varios archivos. El uso del comodín de asterisco debe seguir estas reglas:

  • El asterisco puede aparecer dentro del nombre del objeto o al final de este.
  • No se admite el uso de varios asteriscos. Por ejemplo, la ruta gs://mybucket/fed-*/temp/*.csv no es válida.
  • No se admite el uso de un asterisco con el nombre del bucket.

Ejemplos:

  • En el ejemplo siguiente, se muestra cómo elegir todos los archivos en todas las carpetas que inician con el prefijo gs://mybucket/fed-samples/fed-sample:

    gs://mybucket/fed-samples/fed-sample*
    
  • En el siguiente ejemplo, se muestra cómo elegir solo los archivos con una extensión .csv en la carpeta llamada fed-samples y cualquier subcarpeta de fed-samples:

    gs://mybucket/fed-samples/*.csv
    
  • En el siguiente ejemplo, se muestra cómo elegir archivos con un patrón de nombres de fed-sample*.csv en la carpeta llamada fed-samples. En este ejemplo, no se eligen archivos en subcarpetas de fed-samples.

    gs://mybucket/fed-samples/fed-sample*.csv
    

Cuando usas la herramienta de línea de comandos de bq, es posible que debas descartar el asterisco en algunas plataformas.

Si usas un comodín de asterisco, escribe el bucket y el nombre de archivo entre comillas. Por ejemplo, si tuvieras dos archivos llamados fed-sample000001.csv y fed-sample000002.csv y deseas usar un asterisco para seleccionar ambos, el URI del bucket sería "gs://mybucket/fed-sample*".

El carácter comodín * no se permite cuando se crean archivos de definición de tablas para las fuentes de datos siguientes:

  • Bigtable. Para los datos de Bigtable, solo se puede especificar una fuente de datos. El valor de URI debe ser una URL HTTPS válida para una tabla de Bigtable.
  • Datastore o Firestore. Exportaciones de Datastore o Firestore almacenadas en Cloud Storage. Para las copias de seguridad de Datastore, solo se puede especificar una fuente de datos. El valor del URI debe terminar con .backup_info o .export_metadata.
  • Drive. Datos almacenados en Drive.

¿Qué sigue?