La plantilla de texto de Cloud Storage a Spanner es una canalización por lotes que lee archivos de texto CSV de Cloud Storage y los importa a una base de datos de Spanner.
Requisitos del flujo de procesamiento
- La base de datos y la tabla de destino de Spanner deben existir.
- Debes tener permisos de lectura para el segmento de Cloud Storage y permisos de escritura para la base de datos de Spanner de destino.
- La ruta de Cloud Storage de entrada que contiene los archivos CSV debe existir.
- Debe crear un archivo de manifiesto de importación que contenga una descripción JSON de los archivos CSV y almacenarlo en Cloud Storage.
- Si la base de datos de Spanner de destino ya tiene un esquema, las columnas especificadas en el archivo de manifiesto deben tener los mismos tipos de datos que las columnas correspondientes del esquema de la base de datos de destino.
-
El archivo de manifiesto, codificado en ASCII o UTF-8, debe tener el siguiente formato:
- Los archivos de texto que se importen deben estar en formato CSV y tener codificación ASCII o UTF-8. Te recomendamos que no utilices la marca de orden de bytes (BOM) en archivos codificados en UTF-8.
- Los datos deben coincidir con uno de los siguientes tipos:
GoogleSQL
BOOL INT64 FLOAT64 NUMERIC STRING DATE TIMESTAMP BYTES JSON
PostgreSQL
boolean bigint double precision numeric character varying, text date timestamp with time zone bytea
Parámetros de plantilla
Parámetros obligatorios
- instanceId ID de instancia de la base de datos de Spanner.
- databaseId el ID de la base de datos de Spanner.
- importManifest: ruta de Cloud Storage que se usará al importar archivos de manifiesto. Por ejemplo,
gs://your-bucket/your-folder/your-manifest.json
.
Parámetros opcionales
- 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. - columnDelimiter el delimitador de columnas que usa el archivo de origen. El valor predeterminado es
,
. Por ejemplo,,
. - fieldQualifier: el carácter que debe rodear cualquier valor del archivo de origen que contenga el valor de columnDelimiter. El valor predeterminado son las comillas dobles.
- trailingDelimiter especifica si las líneas de los archivos de origen tienen delimitadores finales, es decir, si el carácter
columnDelimiter
aparece al final de cada línea, después del último valor de columna. El valor predeterminado estrue
. - Escape: el carácter de escape que usa el archivo de origen. De forma predeterminada, este parámetro no se define y la plantilla no usa el carácter de escape.
- nullString cadena que representa un valor
NULL
. De forma predeterminada, este parámetro no se define y la plantilla no usa la cadena nula. - dateFormat formato usado para analizar las columnas de fecha. De forma predeterminada, la canalización intenta analizar las columnas de fecha como
yyyy-M-d[' 00:00:00']
, por ejemplo, como2019-01-31
o2019-1-1 00:00:00
. Si el formato de fecha es diferente, especifícalo con los patrones java.time.format.DateTimeFormatter (https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/time/format/DateTimeFormatter.html). - timestampFormat el formato que se usa para analizar las columnas de marca de tiempo. Si la marca de tiempo es un número entero largo, se analiza como tiempo de época de Unix. De lo contrario, se analiza como una cadena con el formato java.time.format.DateTimeFormatter.ISO_INSTANT (https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/time/format/DateTimeFormatter.html#ISO_INSTANT). En otros casos, especifica tu propia cadena de patrón. Por ejemplo, puedes usar
MMM dd yyyy HH:mm:ss.SSSVV
para las marcas de tiempo con el formatoJan 21 1998 01:02:03.456+08:00
. - spannerProjectId el ID del proyecto de Google Cloud que contiene la base de datos de Spanner. Si no se define, se usa el ID de proyecto del proyecto de Google Cloud predeterminado.
- spannerPriority la prioridad de la solicitud para las llamadas de Spanner. Los valores posibles son
HIGH
,MEDIUM
yLOW
. El valor predeterminado esMEDIUM
. - handleNewLine si
true
, los datos de entrada pueden contener caracteres de salto de línea. De lo contrario, los caracteres de salto de línea provocan un error. El valor predeterminado esfalse
. Habilitar la gestión de saltos de línea puede reducir el rendimiento. - invalidOutputPath ruta de Cloud Storage que se usará al escribir filas que no se puedan importar. Por ejemplo,
gs://your-bucket/your-path
. El valor predeterminado es una cadena vacía.
Si necesitas usar formatos de fecha o de marca de tiempo personalizados, asegúrate de que sean patrones válidos.
java.time.format.DateTimeFormatter
En la siguiente tabla se muestran más ejemplos de formatos personalizados para columnas de fecha y marca de tiempo:
Tipo | Valor de entrada | Formato | Observación |
---|---|---|---|
DATE |
2011-3-31 | De forma predeterminada, la plantilla puede analizar este formato.
No es necesario que especifique el parámetro dateFormat . |
|
DATE |
2011-3-31 00:00:00 | De forma predeterminada, la plantilla puede analizar este formato.
No es necesario que especifiques el formato. Si quieres, puedes usar yyyy-M-d' 00:00:00' . |
|
DATE |
1 de abr., 18 | dd MMM, aa | |
DATE |
Miércoles, 3 de abril del 2019 d. C. | EEEE, d LLLL, yyyy G | |
TIMESTAMP |
2019-01-02T11:22:33Z 2019-01-02T11:22:33.123Z 2019-01-02T11:22:33.12356789Z |
El formato predeterminado ISO_INSTANT puede analizar este tipo de marca de tiempo.
No es necesario que proporcione el parámetro timestampFormat . |
|
TIMESTAMP |
1568402363 | De forma predeterminada, la plantilla puede analizar este tipo de marca de tiempo y tratarla como tiempo de época de Unix. | |
TIMESTAMP |
Tue, 3 Jun 2008 11:05:30 GMT | EEE, d MMM aaaa HH:mm:ss VV | |
TIMESTAMP |
2018/12/31 110530.123PST | aaaa/MM/dd HHmmss.SSSz | |
TIMESTAMP |
2019-01-02T11:22:33Z o 2019-01-02T11:22:33.123Z | yyyy-MM-dd'T'HH:mm:ss[.SSS]VV | Si la columna de entrada es una mezcla de 2019-01-02T11:22:33Z y 2019-01-02T11:22:33.123Z, el
formato predeterminado puede analizar este tipo de marca de tiempo. No es necesario que proporciones tu propio parámetro de formato.
Puedes usar yyyy-MM-dd'T'HH:mm:ss[.SSS]VV para gestionar ambos casos. No puedes usar yyyy-MM-dd'T'HH:mm:ss[.SSS]'Z' porque el sufijo "Z" debe
analizarse como un ID de zona horaria, no como un literal de carácter. Internamente, la columna de marca de tiempo se convierte en un java.time.Instant .
Por lo tanto, debe especificarse en UTC o tener asociada información sobre la zona horaria.
La fecha y hora locales, como 2019-01-02 11:22:33, no se pueden analizar como un java.time.Instant válido.
|
Ejecutar la plantilla
Consola
- Ve a la página Crear tarea a partir de plantilla de Dataflow. Ir a Crear tarea a partir de plantilla
- En el campo Nombre de la tarea, introduce un nombre único.
- 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.
- En el menú desplegable Plantilla de flujo de datos, seleccione the Text Files on Cloud Storage to Cloud Spanner template.
- En los campos de parámetros proporcionados, introduzca los valores de los parámetros.
- Haz clic en Ejecutar trabajo.
gcloud
En tu shell o terminal, ejecuta la plantilla:
gcloud dataflow jobs run JOB_NAME \ --gcs-location gs://dataflow-templates-REGION_NAME/VERSION/GCS_Text_to_Cloud_Spanner \ --region REGION_NAME \ --parameters \ instanceId=INSTANCE_ID,\ databaseId=DATABASE_ID,\ importManifest=GCS_PATH_TO_IMPORT_MANIFEST
Haz los cambios siguientes:
JOB_NAME
: un nombre de trabajo único que elijasVERSION
: la versión de la plantilla que quieres usarPuedes 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
INSTANCE_ID
: el ID de tu instancia de SpannerDATABASE_ID
: tu ID de base de datos de SpannerGCS_PATH_TO_IMPORT_MANIFEST
: la ruta de Cloud Storage a su archivo de manifiesto de importación
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/GCS_Text_to_Cloud_Spanner { "jobName": "JOB_NAME", "parameters": { "instanceId": "INSTANCE_ID", "databaseId": "DATABASE_ID", "importManifest": "GCS_PATH_TO_IMPORT_MANIFEST" }, "environment": { "machineType": "n1-standard-2" } }
Haz los cambios siguientes:
PROJECT_ID
: el ID del proyecto Google Cloud en el que quieres ejecutar la tarea de DataflowJOB_NAME
: un nombre de trabajo único que elijasVERSION
: la versión de la plantilla que quieres usarPuedes 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
INSTANCE_ID
: el ID de tu instancia de SpannerDATABASE_ID
: tu ID de base de datos de SpannerGCS_PATH_TO_IMPORT_MANIFEST
: la ruta de Cloud Storage a su archivo de manifiesto de importación
Siguientes pasos
- Consulta información sobre las plantillas de Dataflow.
- Consulta la lista de plantillas proporcionadas por Google.