Plantilla de Spanner a Avro de Cloud Storage

La plantilla de Spanner a archivos Avro en Cloud Storage es una canalización por lotes que exporta una base de datos de Spanner completa a Cloud Storage en formato Avro. Al exportar una base de datos de Spanner, se crea una carpeta en el segmento que selecciones. La carpeta contiene lo siguiente:

  • Un archivo spanner-export.json.
  • Un archivo TableName-manifest.json por cada tabla de la base de datos que hayas exportado.
  • Uno o varios archivos TableName.avro-#####-of-#####.

Por ejemplo, si exporta una base de datos con dos tablas, Singers y Albums, se creará el siguiente conjunto de archivos:

  • Albums-manifest.json
  • Albums.avro-00000-of-00002
  • Albums.avro-00001-of-00002
  • Singers-manifest.json
  • Singers.avro-00000-of-00003
  • Singers.avro-00001-of-00003
  • Singers.avro-00002-of-00003
  • spanner-export.json

Requisitos del flujo de procesamiento

  • La base de datos de Spanner debe existir.
  • El segmento de Cloud Storage de salida debe existir.
  • Además de los roles de gestión de identidades y accesos (IAM) necesarios para ejecutar trabajos de Dataflow, también debes tener los roles de IAM adecuados para leer tus datos de Spanner y escribir en tu segmento de Cloud Storage.

Parámetros de plantilla

Parámetros obligatorios

  • instanceId el ID de instancia de la base de datos de Spanner que quiere exportar.
  • databaseId el ID de la base de datos de Spanner que quieres exportar.
  • outputDir: ruta de Cloud Storage a la que se exportarán los archivos Avro. El trabajo de exportación crea un directorio en esta ruta que contiene los archivos exportados. Por ejemplo, gs://your-bucket/your-path.

Parámetros opcionales

  • avroTempDirectory: la ruta de Cloud Storage en la que se escriben los archivos Avro temporales.
  • spannerHost el endpoint de Cloud Spanner al que se llama en la plantilla. Solo se usa para hacer pruebas. Por ejemplo, https://batch-spanner.googleapis.com. El valor predeterminado es https://batch-spanner.googleapis.com.
  • snapshotTime la marca de tiempo que corresponde a la versión de la base de datos de Spanner que quieres leer. La marca de tiempo debe especificarse con el formato RFC 3339 UTC Zulu. La marca de tiempo debe ser anterior a la actual y se aplica la obsolescencia máxima de la marca de tiempo. Por ejemplo, 1990-12-31T23:59:60Z. El valor predeterminado es una cadena vacía.
  • spannerProjectId el ID del proyecto de Google Cloud que contiene la base de datos de Spanner de la que quieres leer datos.
  • shouldExportTimestampAsLogicalType si es true, las marcas de tiempo se exportan como un tipo long con el tipo lógico timestamp-micros. De forma predeterminada, este parámetro tiene el valor false y las marcas de tiempo se exportan como cadenas ISO-8601 con una precisión de nanosegundos.
  • tableNames lista de tablas separadas por comas que especifica el subconjunto de la base de datos de Spanner que se va a exportar. Si define este parámetro, debe incluir todas las tablas relacionadas (tablas principales y tablas a las que se hace referencia con claves externas) o definir el parámetro shouldExportRelatedTables como true.Si la tabla está en un esquema con nombre, utilice el nombre completo. Por ejemplo: sch1.foo, donde sch1 es el nombre del esquema y foo es el nombre de la tabla. El valor predeterminado es una cadena vacía.
  • shouldExportRelatedTables indica si se deben incluir las tablas relacionadas. Este parámetro se usa junto con el parámetro tableNames. Valor predeterminado: false.
  • spannerPriority la prioridad de la solicitud para las llamadas de Spanner. Los valores posibles son HIGH, MEDIUM y LOW. El valor predeterminado es MEDIUM.
  • dataBoostEnabled asigna el valor true para usar los recursos de computación de Spanner Data Boost y ejecutar el trabajo con un impacto casi nulo en los flujos de trabajo de OLTP de Spanner. Si se define como true, también necesitas el permiso de gestión de identidades y accesos spanner.databases.useDataBoost. Para obtener más información, consulta la descripción general de Data Boost (https://cloud.google.com/spanner/docs/databoost/databoost-overview). Valor predeterminado: false.

Ejecutar la plantilla

Consola

  1. Ve a la página Crear tarea a partir de plantilla de Dataflow.
  2. Ir a Crear tarea a partir de plantilla
  3. En el campo Nombre de la tarea, introduce un nombre único.
  4. Opcional: En Endpoint regional, seleccione un valor en el menú desplegable. La región predeterminada es us-central1.

    Para ver una lista de las regiones en las que puedes ejecutar una tarea de Dataflow, consulta Ubicaciones de Dataflow.

  5. En el menú desplegable Plantilla de flujo de datos, seleccione the Cloud Spanner to Avro Files on Cloud Storage template.
  6. En los campos de parámetros proporcionados, introduzca los valores de los parámetros.
  7. Haz clic en Ejecutar trabajo.

gcloud

En este ejemplo se usa el comando gcloud dataflow jobs run.

En tu shell o terminal, ejecuta la plantilla:

gcloud dataflow jobs run JOB_NAME \
    --gcs-location gs://dataflow-templates-REGION_NAME/VERSION/Cloud_Spanner_to_GCS_Avro \
    --region REGION_NAME \
    --staging-location GCS_STAGING_LOCATION \
    --parameters 'instanceId=INSTANCE_ID,databaseId=DATABASE_ID,outputDir=GCS_DIRECTORY'

Haz los cambios siguientes:

  • JOB_NAME: un nombre de trabajo único que elijas

    Para que el trabajo se muestre en la parte de Spanner de la Google Cloud consola, el nombre del trabajo debe tener el formato cloud-spanner--INSTANCE_ID-DATABASE_ID.

  • VERSION: la versión de la plantilla que quieres usar

    Puedes usar los siguientes valores:

    • latest para usar la última versión de la plantilla, que está disponible en la carpeta principal sin fecha del contenedor: gs://dataflow-templates-REGION_NAME/latest/
    • el nombre de la versión, como 2023-09-12-00_RC00, para usar una versión específica de la plantilla, que se encuentra anidada en la carpeta principal correspondiente con la fecha en el bucket: gs://dataflow-templates-REGION_NAME/
  • REGION_NAME: la región en la que quieras desplegar tu trabajo de Dataflow. Por ejemplo, us-central1
  • GCS_STAGING_LOCATION: la ruta para escribir archivos temporales; por ejemplo, gs://mybucket/temp
  • INSTANCE_ID: el ID de tu instancia de Spanner
  • DATABASE_ID: tu ID de base de datos de Spanner
  • GCS_DIRECTORY: la ruta de Cloud Storage a la que se o desde la que seimportan los archivos Avro.

API

Para ejecutar la plantilla mediante la API REST, envía una solicitud HTTP POST. Para obtener más información sobre la API y sus ámbitos de autorización, consulta projects.templates.launch.

POST https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/LOCATION/templates:launch?gcsPath=gs://dataflow-templates-LOCATION/VERSION/Cloud_Spanner_to_GCS_Avro
{
   "jobName": "JOB_NAME",
   "parameters": {
       "instanceId": "INSTANCE_ID",
       "databaseId": "DATABASE_ID",
       "outputDir": "gs://GCS_DIRECTORY"
   }
}

Haz los cambios siguientes:

  • PROJECT_ID: el ID del proyecto Google Cloud en el que quieres ejecutar la tarea de Dataflow
  • JOB_NAME: un nombre de trabajo único que elijas

    Para que el trabajo se muestre en la parte de Spanner de la Google Cloud consola, el nombre del trabajo debe tener el formato cloud-spanner--INSTANCE_ID-DATABASE_ID.

  • VERSION: la versión de la plantilla que quieres usar

    Puedes usar los siguientes valores:

    • latest para usar la última versión de la plantilla, que está disponible en la carpeta principal sin fecha del contenedor: gs://dataflow-templates-REGION_NAME/latest/
    • el nombre de la versión, como 2023-09-12-00_RC00, para usar una versión específica de la plantilla, que se encuentra anidada en la carpeta principal correspondiente con la fecha en el bucket: gs://dataflow-templates-REGION_NAME/
  • LOCATION: la región en la que quieras desplegar tu trabajo de Dataflow. Por ejemplo, us-central1
  • GCS_STAGING_LOCATION: la ruta para escribir archivos temporales; por ejemplo, gs://mybucket/temp
  • INSTANCE_ID: el ID de tu instancia de Spanner
  • DATABASE_ID: tu ID de base de datos de Spanner
  • GCS_DIRECTORY: la ruta de Cloud Storage a la que se o desde la que seimportan los archivos Avro.

Siguientes pasos