O modelo Apache Cassandra para Bigtable copia uma tabela do Apache Cassandra para o Bigtable. Este modelo requer uma configuração mínima e replica a estrutura da tabela no Cassandra o mais próximo possível no Bigtable.
O modelo do Apache Cassandra para o Bigtable é útil para o seguinte:
- Migrar a base de dados do Apache Cassandra quando um curto período de inatividade é aceitável.
- Replicação periódica de tabelas do Cassandra para o Bigtable para serviço global.
Requisitos do pipeline
- A tabela do Bigtable de destino tem de existir antes de executar o pipeline.
- Ligação de rede entre os trabalhadores do Dataflow e os nós do Apache Cassandra.
Tipo de conversão
O modelo do Apache Cassandra para o Bigtable converte automaticamente os tipos de dados do Apache Cassandra nos tipos de dados do Bigtable.
A maioria dos tipos primitivos é representada da mesma forma no Bigtable e no Apache Cassandra. No entanto, os seguintes tipos primitivos são representados de forma diferente:
Date
eTimestamp
são convertidos em objetosDateTime
UUID
é convertido emString
Varint
é convertido emBigDecimal
O Apache Cassandra também suporta nativamente tipos mais complexos, como Tuple
, List
, Set
e Map
.
As tuplas não são suportadas por este pipeline, uma vez que não existe um tipo correspondente no Apache Beam.
Por exemplo, no Apache Cassandra, pode ter uma coluna do tipo List
denominada "mylist" e valores como os da tabela seguinte:
linha | mylist |
---|---|
1 | (a,b,c) |
O pipeline expande a coluna de lista em três colunas diferentes (conhecidas no Bigtable como qualificadores de colunas). O nome das colunas é "mylist", mas a app de pipeline anexa o índice do item na lista, como "mylist[0]".
linha | mylist[0] | mylist[1] | mylist[2] |
---|---|---|---|
1 | a | b | c |
O pipeline processa os conjuntos da mesma forma que as listas, mas adiciona um sufixo para indicar se a célula é uma chave ou um valor.
linha | mymap |
---|---|
1 | {"first_key":"first_value","another_key":"different_value"} |
Após a transformação, a tabela é apresentada da seguinte forma:
linha | mymap[0].key | mymap[0].value | mymap[1].key | mymap[1].value |
---|---|---|---|---|
1 | first_key | first_value | another_key | different_value |
Conversão de chave principal
No Apache Cassandra, uma chave primária é definida através da linguagem de definição de dados. A chave primária é simples, composta ou complexa com as colunas de agrupamento. O Bigtable suporta a construção manual de chaves de linhas, ordenadas lexicograficamente numa matriz de bytes. O pipeline recolhe automaticamente informações sobre o tipo de chave e cria uma chave com base nas práticas recomendadas para criar chaves de linhas com base em vários valores.
Parâmetros de modelos
Parâmetros obrigatórios
- cassandraHosts: os anfitriões dos nós do Apache Cassandra numa lista separada por vírgulas.
- cassandraKeyspace: o espaço de chaves do Apache Cassandra onde a tabela está localizada.
- cassandraTable: a tabela do Apache Cassandra a copiar.
- bigtableProjectId: o ID do projeto do Google Cloud associado à instância do Bigtable.
- bigtableInstanceId: o ID da instância do Bigtable para a qual a tabela do Apache Cassandra é copiada.
- bigtableTableId: o nome da tabela do Bigtable para a qual a tabela do Apache Cassandra é copiada.
Parâmetros opcionais
- cassandraPort: a porta TCP a usar para alcançar o Apache Cassandra nos nós. O valor predefinido é
9042
. - defaultColumnFamily: o nome da família de colunas da tabela do Bigtable. O valor predefinido é
default
. - rowKeySeparator: o separador usado para criar chaves de linhas. O valor predefinido é
#
. - splitLargeRows: a flag para ativar a divisão de linhas grandes em vários pedidos MutateRows. Tenha em atenção que, quando uma linha grande é dividida entre várias chamadas da API, as atualizações à linha não são atómicas. .
- writetimeCassandraColumnSchema: caminho do GCS para o esquema para copiar as horas de gravação do Cassandra para o Bigtable. O comando para gerar este esquema é
cqlsh -e "select json * from system_schema.columns where keyspace_name='$CASSANDRA_KEYSPACE' and table_name='$CASSANDRA_TABLE'`" > column_schema.json
. Defina $WRITETIME_CASSANDRA_COLUMN_SCHEMA para um caminho do GCS, por exemplo,gs://$BUCKET_NAME/column_schema.json
. Em seguida, carregue o esquema para o GCS:gcloud storage cp column_schema.json $WRITETIME_CASSANDRA_COLUMN_SCHEMA
. Requer a versão 2.2 ou posterior do Cassandra para suporte de JSON. - setZeroTimestamp: o indicador para definir a data/hora da célula do Bigtable como 0 se o writetime do Cassandra não estiver presente. O comportamento predefinido quando esta flag não está definida é definir a data/hora da célula do Bigtable como a hora de replicação do modelo, ou seja, agora.
Execute o modelo
Consola
- Aceda à página do fluxo de dados Criar tarefa a partir de um modelo. Aceda a Criar tarefa a partir de modelo
- No campo Nome da tarefa, introduza um nome exclusivo para a tarefa.
- Opcional: para Ponto final regional, selecione um valor no menu pendente. A região
predefinida é
us-central1
.Para ver uma lista das regiões onde pode executar uma tarefa do Dataflow, consulte as localizações do Dataflow.
- No menu pendente Modelo do fluxo de dados, selecione the Cassandra to Cloud Bigtable template.
- Nos campos de parâmetros fornecidos, introduza os valores dos parâmetros.
- Clique em Executar tarefa.
gcloud
Na shell ou no terminal, execute o modelo:
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
Substitua o seguinte:
JOB_NAME
: um nome de tarefa exclusivo à sua escolhaVERSION
: a versão do modelo que quer usarPode usar os seguintes valores:
latest
para usar a versão mais recente do modelo, que está disponível na pasta principal sem data no contentor: gs://dataflow-templates-REGION_NAME/latest/- o nome da versão, como
2023-09-12-00_RC00
, para usar uma versão específica do modelo, que pode ser encontrada aninhada na pasta principal com a data correspondente no contentor: gs://dataflow-templates-REGION_NAME/
REGION_NAME
: a região onde quer implementar a tarefa do Dataflow, por exemplo,us-central1
BIGTABLE_PROJECT_ID
: o ID do projeto onde o Bigtable está localizadoBIGTABLE_INSTANCE_ID
: o ID da instância do BigtableBIGTABLE_TABLE_ID
: o nome da tabela do BigtableCASSANDRA_HOSTS
: a lista de anfitriões do Apache Cassandra; se forem fornecidos vários anfitriões, siga a instrução sobre como escapar às vírgulasCASSANDRA_KEYSPACE
: o espaço de chaves do Apache Cassandra onde a tabela está localizadaCASSANDRA_TABLE
: a tabela do Apache Cassandra que tem de ser migrada
API
Para executar o modelo através da API REST, envie um pedido HTTP POST. Para mais informações sobre a API e os respetivos âmbitos de autorização, consulte 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" } }
Substitua o seguinte:
PROJECT_ID
: o ID do projeto onde quer executar a tarefa do Dataflow Google CloudJOB_NAME
: um nome de tarefa exclusivo à sua escolhaVERSION
: a versão do modelo que quer usarPode usar os seguintes valores:
latest
para usar a versão mais recente do modelo, que está disponível na pasta principal sem data no contentor: gs://dataflow-templates-REGION_NAME/latest/- o nome da versão, como
2023-09-12-00_RC00
, para usar uma versão específica do modelo, que pode ser encontrada aninhada na pasta principal com a data correspondente no contentor: gs://dataflow-templates-REGION_NAME/
LOCATION
: a região onde quer implementar a tarefa do Dataflow, por exemplo,us-central1
BIGTABLE_PROJECT_ID
: o ID do projeto onde o Bigtable está localizadoBIGTABLE_INSTANCE_ID
: o ID da instância do BigtableBIGTABLE_TABLE_ID
: o nome da tabela do BigtableCASSANDRA_HOSTS
: a lista de anfitriões do Apache Cassandra; se forem fornecidos vários anfitriões, siga a instrução sobre como escapar às vírgulasCASSANDRA_KEYSPACE
: o espaço de chaves do Apache Cassandra onde a tabela está localizadaCASSANDRA_TABLE
: a tabela do Apache Cassandra que tem de ser migrada
O que se segue?
- Saiba mais sobre os modelos do Dataflow.
- Consulte a lista de modelos fornecidos pela Google.