O modelo do Apache Cassandra para o Bigtable copia uma tabela do Apache Cassandra para o Bigtable. Esse modelo precisa de configuração mínima e replica a estrutura da tabela no Cassandra da maneira mais semelhante possível no Bigtable.
O modelo do Apache Cassandra para Bigtable é útil para:
- migrar o banco de dados do Apache Cassandra quando um tempo de inatividade curto é aceitável;
- replicar periodicamente as tabelas do Cassandra no Bigtable para exibição global.
Requisitos de pipeline
- A tabela de destino do Bigtable precisa existir antes da execução do pipeline.
- Conexão de rede entre workers do Dataflow e nós do Apache Cassandra.
Conversão de tipo
O modelo do Apache Cassandra para Bigtable converte automaticamente os tipos de dados do Apache Cassandra para os tipos de dados do Bigtable.
A maioria dos primitivos é representada da mesma forma no Bigtable e no Apache Cassandra, mas estes são diferentes:
Date
eTimestamp
são convertidos em objetosDateTime
UUID
é convertida emString
Varint
é convertida emBigDecimal
O Apache Cassandra também é compatível nativamente com tipos mais complexos como Tuple
, List
, Set
e Map
.
As tuplas não são compatíveis com esse pipeline por que não há um tipo correspondente no Apache Beam.
Por exemplo, no Apache Cassandra, é possível ter uma coluna do tipo List
chamada "mylist" e valores como os da tabela a seguir:
linha | mylist |
---|---|
1 | (a,b,c) |
O pipeline expande a coluna de lista em três colunas diferentes, conhecidas no Bigtable como qualificadoras de colunas. O nome das colunas é "mylist", mas o 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 extra 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 aparece da seguinte maneira:
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 primária
No Apache Cassandra, uma chave primária é definida usando a linguagem de definição de dados. Ela pode ser simples, composta ou constituída por colunas de clustering. O Bigtable é compatível com a construção de chave de linha manual, lexicograficamente ordenada em uma matriz de bytes. O pipeline coleta automaticamente informações sobre o tipo de chave e cria uma chave com base nas práticas recomendadas para criar chaves de linha com base em diversos valores.
Parâmetros do modelo
Parâmetros obrigatórios
- cassandraHosts: os hosts dos nós do Apache Cassandra em uma lista separada por vírgulas.
- cassandraKeyspace: espaço de chaves do Apache Cassandra em que a tabela está localizada.
- cassandraTable: a tabela do Apache Cassandra a ser copiada.
- bigtableProjectId: o ID do projeto do Google Cloud associado à instância do Bigtable.
- bigtableInstanceId: o ID da instância do Bigtable em que a tabela do Apache Cassandra é copiada.
- bigtableTableId: o nome da tabela do Bigtable em que a tabela do Apache Cassandra é copiada.
Parâmetros opcionais
- cassandraPort: a porta TCP a ser usada para acessar o Apache Cassandra nos nós. O valor padrão é 9042.
- defaultColumnFamily: o nome do grupo de colunas da tabela do Bigtable. O valor padrão é o padrão.
- rowKeySeparator: o separador usado para criar chaves de linha. O valor padrão é "#".
- splitLargeRows: a sinalização para ativar a divisão de linhas grandes em várias solicitações mutateRows. Quando uma linha grande é dividida entre várias chamadas de API, as atualizações da linha não são atômicas. .
- writetimeCassandraColumnSchema : caminho do GCS para o esquema de cópia de writetimes do Cassandra para o Bigtable. O comando para gerar esse 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 como um caminho do GCS, por exemplo,gs://$BUCKET_NAME/column_schema.json
. Em seguida, faça upload do esquema para o GCS:gcloud storage cp column_schema.json $WRITETIME_CASSANDRA_COLUMN_SCHEMA
. Requer a versão 2.2 ou mais recente do Cassandra para suporte a JSON. - setZeroTimestamp : a flag para definir o carimbo de data/hora da célula do Bigtable como 0 se o writetime do Cassandra não estiver presente. O comportamento padrão para quando essa flag não está definida é definir o carimbo de data/hora da célula do Bigtable como o tempo de replicação do modelo, ou seja, agora.
Executar o modelo
Console
- Acesse a página Criar job usando um modelo do Dataflow. Acesse Criar job usando um modelo
- No campo Nome do job, insira um nome exclusivo.
- Opcional: em Endpoint regional, selecione um valor no menu suspenso. A região padrão é
us-central1
.Para ver uma lista de regiões em que é possível executar um job do Dataflow, consulte Locais do Dataflow.
- No menu suspenso Modelo do Dataflow, selecione the Cassandra to Cloud Bigtable template.
- Nos campos de parâmetro fornecidos, insira os valores de parâmetro.
- Cliquem em Executar job.
gcloud
No 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:
JOB_NAME
: um nome de job de sua escolhaVERSION
: a versão do modelo que você quer usarUse estes valores:
latest
para usar a versão mais recente do modelo, disponível na pasta mãe não datada no bucket: 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 respectiva pasta mãe datada no bucket: gs://dataflow-templates-REGION_NAME/
REGION_NAME
: a região em que você quer implantar o job do Dataflow, por exemplo,us-central1
BIGTABLE_PROJECT_ID
: o ID do projeto em que o Bigtable está localizadoBIGTABLE_INSTANCE_ID
: o ID da instância do Bigtable.BIGTABLE_TABLE_ID
: o nome da tabela do BigtableCASSANDRA_HOSTS
: a lista de hosts do Apache Cassandra. Se forem fornecidos vários hosts, siga as instruções sobre como fazer escape de vírgulas.CASSANDRA_KEYSPACE
: o espaço de chaves do Apache Cassandra em que a tabela está localizada.CASSANDRA_TABLE
: a tabela do Apache Cassandra que precisa ser migrada
API
Para executar o modelo usando a API REST, envie uma solicitação HTTP POST. Para mais informações sobre a
API e os respectivos escopos 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:
PROJECT_ID
: o ID do projeto do Google Cloud em que você quer executar o job do DataflowJOB_NAME
: um nome de job de sua escolhaVERSION
: a versão do modelo que você quer usarUse estes valores:
latest
para usar a versão mais recente do modelo, disponível na pasta mãe não datada no bucket: 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 respectiva pasta mãe datada no bucket: gs://dataflow-templates-REGION_NAME/
LOCATION
: a região em que você quer implantar o job do Dataflow, por exemplo,us-central1
BIGTABLE_PROJECT_ID
: o ID do projeto em que o Bigtable está localizadoBIGTABLE_INSTANCE_ID
: o ID da instância do Bigtable.BIGTABLE_TABLE_ID
: o nome da tabela do BigtableCASSANDRA_HOSTS
: a lista de hosts do Apache Cassandra. Se forem fornecidos vários hosts, siga as instruções sobre como fazer escape de vírgulas.CASSANDRA_KEYSPACE
: o espaço de chaves do Apache Cassandra em que a tabela está localizada.CASSANDRA_TABLE
: a tabela do Apache Cassandra que precisa ser migrada
A seguir
- Saiba mais sobre os modelos do Dataflow.
- Confira a lista de modelos fornecidos pelo Google.