La plantilla de Apache Cassandra a Bigtable copia una tabla de Apache Cassandra a Bigtable. Tiene requisitos de configuración mínimos y replica lo mejor posible la estructura de la tabla de Cassandra en Bigtable.
La plantilla de Apache Cassandra a Bigtable es útil para las siguientes acciones:
- Migrar la base de datos de Apache Cassandra cuando es aceptable tener un tiempo de inactividad breve
- Replicar de forma periódica las tablas de Cassandra en Bigtable para fines de entrega global
Requisitos de la canalización
- La tabla de destino de Bigtable debe existir antes de ejecutar la canalización.
- Debe existir una conexión de red entre los trabajadores de Dataflow y los nodos de Apache Cassandra.
Conversión de tipos
La plantilla de Apache Cassandra a Bigtable convierte automáticamente los tipos de datos de Apache Cassandra en los de Bigtable.
La mayoría de los tipos de datos primitivos se representan de la misma manera en Bigtable y Apache Cassandra. Sin embargo, los siguientes datos primitivos se representan de forma distinta:
Date
yTimestamp
se convierten en objetosDateTime
UUID
se convierte enString
Varint
se convierte enBigDecimal
Apache Cassandra también admite de forma nativa tipos más complejos, como Tuple
, List
, Set
y Map
.
Esta canalización no admite tuplas, ya que no hay un tipo correspondiente en Apache Beam.
Por ejemplo, en Apache Cassandra puedes tener una columna de tipo List
denominada “mylist” y valores como los de la siguiente tabla:
fila | milista |
---|---|
1 | (a,b,c) |
La canalización expande la columna de lista en tres diferentes (conocidas en Bigtable como calificadores de columna). El nombre de las columnas es “mylist”, pero la canalización anexa el índice del elemento de la lista, como “mylist[0]”.
fila | mylist[0] | milista[1] | milista[2] |
---|---|---|---|
1 | a | b | c |
La canalización controla los conjuntos del mismo modo que las listas, pero agrega un sufijo para indicar si la celda es una clave o un valor.
fila | mimapa |
---|---|
1 | {"first_key":"first_value","another_key":"different_value"} |
Después de la transformación, la tabla aparece de la siguiente manera:
fila | mymap[0].key | mimapa[0].valor | mymap[1].key | mymap[1].value |
---|---|---|---|---|
1 | primera_clave | primer_valor | otra_clave | otro_valor |
Conversión de claves primarias
En Apache Cassandra se establece una clave primaria con el lenguaje de definición de datos. La clave primaria puede ser simple, compuesta o conformada por columnas de agrupamiento en clústeres. Bigtable admite la construcción manual de claves de fila, ordenadas de forma lexicográfica en un array de bytes. Esta canalización recopila de manera automática información sobre el tipo de clave y crea la clave según las prácticas recomendadas para compilar claves de filas basadas en varios valores.
Parámetros de la plantilla
Parámetros obligatorios
- cassandraHosts: Los hosts de los nodos de Apache Cassandra en una lista separada por comas.
- cassandraKeyspace: El espacio de claves de Apache Cassandra en el que se encuentra la tabla.
- cassandraTable: La tabla de Apache Cassandra que se copiará.
- bigtableProjectId: El ID del proyecto de Google Cloud asociado con la instancia de Bigtable.
- bigtableInstanceId: El ID de la instancia de Bigtable a la que se copia la tabla Apache Cassandra.
- bigtableTableId: El nombre de la tabla de Bigtable a la que se copia la tabla Apache Cassandra.
Parámetros opcionales
- cassandraPort: El puerto TCP que se usará para alcanzar a Apache Cassandra en los nodos. El valor predeterminado es 9042.
- defaultColumnFamily: El nombre de la familia de columnas de la tabla de Bigtable. El valor predeterminado es el predeterminado.
- rowKeySeparator: El separador que se usa para compilar claves de fila. El valor predeterminado es “#”.
- splitLargeRows: La marca para habilitar la división de filas grandes en varias solicitudes MutateRows. Ten en cuenta que cuando una fila grande se divide entre varias llamadas a la API, las actualizaciones de la fila no son atómicas. .
- writetimeCassandraColumnSchema : Es la ruta de acceso de GCS al esquema para copiar los tiempos de escritura de Cassandra en Bigtable. El comando para generar este esquema es
cqlsh -e "select json * from system_schema.columns where keyspace_name='$CASSANDRA_KEYSPACE' and table_name='$CASSANDRA_TABLE'`" > column_schema.json
. Establece $WRITETIME_CASSANDRA_COLUMN_SCHEMA en una ruta de acceso de GCS, p.ej.,gs://$BUCKET_NAME/column_schema.json
. Luego, sube el esquema a GCS:gcloud storage cp column_schema.json $WRITETIME_CASSANDRA_COLUMN_SCHEMA
. Requiere Cassandra versión 2.2 o posterior para admitir JSON. - setZeroTimestamp : Es la marca para establecer la marca de tiempo de la celda de Bigtable en 0 si no está presente el tiempo de escritura de Cassandra. El comportamiento predeterminado cuando no se establece esta marca es establecer la marca de tiempo de la celda de Bigtable como la hora de replicación de la plantilla, es decir, ahora.
Ejecuta la plantilla
Console
- Ve a la página Crear un trabajo a partir de una plantilla de Dataflow. Ir a Crear un trabajo a partir de una plantilla
- En el campo Nombre del trabajo, ingresa un nombre de trabajo único.
- Opcional: Para Extremo regional, selecciona un valor del menú desplegable. La región predeterminada es
us-central1
.Para obtener una lista de regiones en las que puedes ejecutar un trabajo de Dataflow, consulta Ubicaciones de Dataflow.
- En el menú desplegable Plantilla de Dataflow, selecciona the Cassandra to Cloud Bigtable template.
- En los campos de parámetros proporcionados, ingresa los valores de tus parámetros.
- Haga 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/Cassandra_To_Cloud_Bigtable \ --region REGION_NAME \ --parameters \ bigtableProjectId=BIGTABLE_PROJECT_ID,\ bigtableInstanceId=BIGTABLE_INSTANCE_ID,\ bigtableTableId=BIGTABLE_TABLE_ID,\ cassandraHosts=CASSANDRA_HOSTS,\ cassandraKeyspace=CASSANDRA_KEYSPACE,\ cassandraTable=CASSANDRA_TABLE
Reemplaza lo siguiente:
JOB_NAME
: Es el nombre del trabajo que elijasVERSION
: Es la versión de la plantilla que deseas usar.Puedes usar los siguientes valores:
latest
para usar la última versión de la plantilla, que está disponible en la carpeta superior non-dated en el bucket 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 puede encontrar anidada en la carpeta superior con fecha correspondiente en el bucket gs://dataflow-templates-REGION_NAME/
REGION_NAME
: La región en la que deseas implementar tu trabajo de Dataflow, por ejemplo,us-central1
BIGTABLE_PROJECT_ID
: el ID del proyecto en el que se encuentra BigtableBIGTABLE_INSTANCE_ID
: el ID de la instancia de BigtableBIGTABLE_TABLE_ID
: el nombre de tu tabla de BigtableCASSANDRA_HOSTS
: Es la lista de hosts de Apache Cassandra. Si se proporcionan varios hosts, sigue las instrucciones para escapar de las comas.CASSANDRA_KEYSPACE
: Es el espacio de claves de Apache Cassandra en el que se encuentra la tabla.CASSANDRA_TABLE
: Es la tabla de Apache Cassandra que debe migrarse.
API
Para ejecutar la plantilla con la API de REST, envía una solicitud POST HTTP. Para obtener más información de la API y sus permisos 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/Cassandra_To_Cloud_Bigtable { "jobName": "JOB_NAME", "parameters": { "bigtableProjectId": "BIGTABLE_PROJECT_ID", "bigtableInstanceId": "BIGTABLE_INSTANCE_ID", "bigtableTableId": "BIGTABLE_TABLE_ID", "cassandraHosts": "CASSANDRA_HOSTS", "cassandraKeyspace": "CASSANDRA_KEYSPACE", "cassandraTable": "CASSANDRA_TABLE" }, "environment": { "zone": "us-central1-f" } }
Reemplaza lo siguiente:
PROJECT_ID
: El ID del proyecto de Google Cloud en el que deseas ejecutar el trabajo de Dataflow.JOB_NAME
: Es el nombre del trabajo que elijasVERSION
: Es la versión de la plantilla que deseas usar.Puedes usar los siguientes valores:
latest
para usar la última versión de la plantilla, que está disponible en la carpeta superior non-dated en el bucket 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 puede encontrar anidada en la carpeta superior con fecha correspondiente en el bucket gs://dataflow-templates-REGION_NAME/
LOCATION
: La región en la que deseas implementar tu trabajo de Dataflow, por ejemplo,us-central1
BIGTABLE_PROJECT_ID
: el ID del proyecto en el que se encuentra BigtableBIGTABLE_INSTANCE_ID
: el ID de la instancia de BigtableBIGTABLE_TABLE_ID
: el nombre de tu tabla de BigtableCASSANDRA_HOSTS
: Es la lista de hosts de Apache Cassandra. Si se proporcionan varios hosts, sigue las instrucciones para escapar de las comas.CASSANDRA_KEYSPACE
: Es el espacio de claves de Apache Cassandra en el que se encuentra la tabla.CASSANDRA_TABLE
: Es la tabla de Apache Cassandra que debe migrarse.
¿Qué sigue?
- Obtén información sobre las plantillas de Dataflow.
- Consulta la lista de plantillas que proporciona Google.