Todos os produtos
Search
Central de documentação

AnalyticDB:Use Spark SQL to read from and write to C-Store tables

Última atualização: Jun 27, 2026

Use o Spark SQL em um cluster do AnalyticDB for MySQL para ler e gravar dados em tabelas C-Store (mecanismo XUANWU) nos modos em lote ou em tempo real.

Pré-requisitos

Antes de começar, verifique se você tem:

  • Um cluster do AnalyticDB for MySQL nas edições Enterprise, Basic ou Data Lakehouse:

    • Data Lakehouse Edition: deve ter mais de 0 ACUs de recursos de armazenamento reservados

    • Enterprise Edition: deve ter mais de 0 ACUs de recursos reservados

    • Basic Edition: deve ter mais de 0 ACUs de recursos reservados

  • Um grupo de recursos de job criado para o cluster

  • Uma conta de banco de dados criada para o cluster

Escolha um modo

Dois modos estão disponíveis conforme o caso de uso:

Modo

Instrução

Grupo de recursos necessário

Modo em lote

INSERT OVERWRITE

Mecanismo Spark e um grupo de recursos de job

Modo em tempo real

INSERT INTO

Mecanismo Spark, grupo de recursos de job e um grupo de recursos interativo (especificado via comando SET)

Etapa 1: Acesse o desenvolvimento SQL

  1. Faça login no console do AnalyticDB for MySQL. No canto superior esquerdo, selecione uma região. No painel de navegação à esquerda, clique em Clusters, localize o cluster e clique no ID correspondente.

  2. No painel de navegação à esquerda, escolha Job Development > SQL Development.

  3. Na aba SQLConsole, selecione o mecanismo Spark e um grupo de recursos de job.

Etapa 2: Crie um banco de dados e uma tabela C-Store

Execute as instruções a seguir no modo de processamento em lote ou no modo interativo. Para obter detalhes, consulte Modos de execução do Spark SQL .
  1. Crie um banco de dados:

    CREATE DATABASE spark_create_adb_db_test;
  2. Crie uma tabela C-Store. Para a sintaxe completa de criação de tabela, consulte Criar uma tabela interna usando Spark SQL.

    CREATE TABLE spark_create_adb_db_test.test_adb_tbl (
      id int,
      name string COMMENT 'test_name',
      age int
    ) using adb TBLPROPERTIES('primaryKey'='id,age',
                    'distributeType'='HASH',
                    'distributeColumns'='id',
                    'partitionType'='value',
                    'partitionColumn'='age',
                    'partitionCount'='120',
                    'storagePolicy'='COLD'
                   );

Etapa 3: Leia e grave dados

Ao executar uma instrução Spark SQL, o sistema retorna apenas uma mensagem de sucesso ou falha, sem dados inline. Para visualizar os dados da tabela, verifique os Logs na aba Application List da página Spark Jar Development . Para obter detalhes, consulte Visualizar informações de aplicativos Spark .

Modo em lote (INSERT OVERWRITE)

Observações de uso

  • O Spark SQL oferece suporte a SELECT e INSERT apenas para tabelas particionadas. Não há suporte para tabelas não particionadas. Para saber como criar tabelas particionadas, consulte CREATE TABLE.

  • Não há suporte para as instruções UPDATE e DELETE em tabelas C-Store, independentemente do particionamento.

  • Para consultar dados quentes, conclua as etapas a seguir antes de executar qualquer consulta. Caso contrário, as consultas falharão.

    1. Use o mecanismo XIHE para ativar a configuração de partição quente:

      SET adb_config ELASTIC_ENABLE_HOT_PARTITION_HAS_HDD_REPLICA=true;
    2. Acione um job BUILD para reconstruir o índice:

      • Build specific partitions (requer versão do cluster V3.1.6.0 ou posterior): > Important: Para visualizar e atualizar a versão secundária, acesse a seção Configuration Information na página Cluster Information.

        BUILD TABLE <table_name> force partitions='partition1,partition2';
      • Reconstruir toda a tabela (desativado por padrão, pois reconstruir todas as partições consome muito tempo; envie um ticket para ativar):envie um ticket

        BUILD TABLE <table_name> force = true;

        envie um ticket

    3. Verifique o status do job BUILD:

      SELECT table_name, schema_name, status FROM INFORMATION_SCHEMA.KEPLER_META_BUILD_TASK ORDER BY create_time DESC LIMIT 10;

      Aguarde a conclusão do job antes de executar consultas.

Gravar e ler dados

Grave dados na tabela C-Store usando INSERT OVERWRITE. Há dois métodos de particionamento disponíveis:

  • Partição estática: especifique o valor da partição na cláusula PARTITION.

    INSERT OVERWRITE spark_create_adb_db_test.test_adb_tbl partition(age=10) VALUES (1, 'bom');
  • Partição dinâmica: inclua o valor da coluna de partição na lista VALUES.

    INSERT OVERWRITE spark_create_adb_db_test.test_adb_tbl partition (age) VALUES (1, 'bom', 10);

Leia dados da tabela:

SELECT * FROM spark_create_adb_db_test.test_adb_tbl;

Modo em tempo real (INSERT INTO)

Use a instrução INSERT INTO para gravar dados no modo em tempo real. Três métodos de conexão estão disponíveis: JDBC, View e Catalog.

Todos os métodos exigem acesso baseado em Elastic Network Interface (ENI), que roteia o tráfego pela VPC do cluster usando um vSwitch e um grupo de segurança.

Método JDBC

Configure os parâmetros de conexão e grave e leia diretamente usando instruções SQL.

-- Connection credentials and internal endpoint
conf spark.adb.username=<database-account>;
conf spark.adb.password=<password>;
conf spark.adb.endpoint=<cluster-internal-endpoint>:3306;
-- Enable ENI-based access
SET spark.adb.eni.enabled=true;
SET spark.adb.eni.vswitchId=<vswitch-id>;
SET spark.adb.eni.securityGroupId=<security-group-id>;
-- Use JDBC mode for real-time writes
SET spark.adb.useJdbc=true;
-- Set the interactive resource group for SQL execution
SET spark.adb.resourceGroup=user_default;
-- Write data
INSERT INTO spark_create_adb_db_test.test_adb_tbl VALUES (1, 'adb', 20);
-- Read data
SELECT * FROM spark_create_adb_db_test.test_adb_tbl;

Parâmetro

Descrição

spark.adb.username

Conta de banco de dados do cluster

spark.adb.password

Senha da conta de banco de dados

spark.adb.endpoint

Endpoint interno e porta do cluster, no formato <endpoint>:3306

spark.adb.eni.enabled

Defina como true para ativar o acesso baseado em ENI

spark.adb.eni.vswitchId

ID do vSwitch ao qual o cluster pertence

spark.adb.eni.securityGroupId

ID do grupo de segurança do cluster. O grupo de segurança deve estar na mesma VPC que o cluster

spark.adb.useJdbc

Indica se o modo JDBC deve ser usado. Defina como true para gravações em tempo real. Padrão: false

spark.adb.resourceGroup

Grupo de recursos interativo para execução de SQL. O grupo user_default é criado automaticamente durante a criação do cluster. Para criar um novo grupo de recursos, consulte Criar e gerenciar um grupo de recursos

Método View

Crie uma view temporária mapeada para a tabela C-Store e use SQL padrão para ler e gravar por meio dela.

-- Enable ENI-based access
SET spark.adb.eni.enabled=true;
SET spark.adb.eni.vswitchId=<vswitch-id>;
SET spark.adb.eni.securityGroupId=<security-group-id>;
-- Create a temporary view mapped to the target table
CREATE TEMPORARY VIEW table_tmp
USING org.apache.spark.sql.jdbc
OPTIONS (
  url 'jdbc:mysql://<cluster-internal-endpoint>:3306/spark_create_adb_db_test?useServerPrepStmts=false&rewriteBatchedStatements=true',
  dbtable 'spark_create_adb_db_test.test_adb_tbl',
  user '<database-account>',
  password '<password>'
);
-- Write data
INSERT INTO table_tmp VALUES (1, 'adb', 20);
-- Read data
SELECT * FROM table_tmp;

Parâmetro

Descrição

spark.adb.eni.enabled

Defina como true para ativar o acesso baseado em ENI

spark.adb.eni.vswitchId

ID do vSwitch ao qual o cluster pertence

spark.adb.eni.securityGroupId

ID do grupo de segurança do cluster. Deve estar na mesma VPC que o cluster

table_tmp

Nome da view temporária. É possível usar qualquer nome

USING org.apache.spark.sql.jdbc

Valor fixo: especifica a source de dados JDBC

url

String de conexão JDBC no formato jdbc:mysql://<endpoint>:3306/<db_name>?useServerPrepStmts=false&rewriteBatchedStatements=true. Os parâmetros useServerPrepStmts=false&rewriteBatchedStatements=true são obrigatórios para gravações em lote e melhoram o desempenho de gravação

dbtable

Tabela de destino no formato <db_name>.<table_name>

user

Conta de banco de dados do cluster

password

Senha da conta de banco de dados

Método Catalog

Registre o cluster como um catálogo JDBC nomeado no Spark e consulte tabelas usando o prefixo do catálogo.

-- Enable ENI-based access
SET spark.adb.eni.enabled=true;
SET spark.adb.eni.vswitchId=<vswitch-id>;
SET spark.adb.eni.securityGroupId=<security-group-id>;
-- Register the JDBC catalog (catalog name "jdbc" is used as an example — you can customize it)
SET spark.sql.catalog.jdbc=org.apache.spark.sql.execution.datasources.v2.jdbc.JDBCTableCatalog;
SET spark.sql.catalog.jdbc.url=jdbc:mysql://<cluster-internal-endpoint>:3306/?useServerPrepStmts=false&rewriteBatchedStatements=true;
SET spark.sql.catalog.jdbc.user=<database-account>;
SET spark.sql.catalog.jdbc.password=<password>;
-- Switch to the catalog and query
use jdbc;
SELECT * FROM spark_create_adb_db_test.test_adb_tbl;

Parâmetro

Descrição

spark.sql.catalog.jdbc

Valor fixo: org.apache.spark.sql.execution.datasources.v2.jdbc.JDBCTableCatalog. A parte jdbc do nome do parâmetro é o nome do catálogo e pode ser personalizada

spark.sql.catalog.jdbc.url

URL JDBC no formato jdbc:mysql://<endpoint>:3306/?useServerPrepStmts=false&rewriteBatchedStatements=true

spark.sql.catalog.jdbc.user

Conta de banco de dados do cluster

spark.sql.catalog.jdbc.password

Senha da conta de banco de dados

Parâmetros do Spark

Configure os parâmetros a seguir para ajustar o desempenho de leitura e gravação.

Parâmetro

Descrição

Padrão

spark.adb.write.batchSize

Número de registros gravados por lote. Deve ser um número inteiro positivo. Aplica-se apenas ao modo em tempo real

600

spark.adb.write.arrow.maxMemoryBufferSize

Tamanho máximo do buffer de memória para operações de gravação, em MB. Deve ser um número inteiro positivo. Aplica-se apenas ao modo em lote

1024

spark.adb.write.arrow.maxRecordSizePerBatch

Número máximo de registros por gravação em lote. Deve ser um número inteiro positivo. Aplica-se apenas ao modo em lote

500

Próximos passos