O AnalyticDB for MySQL oferece suporte ao Spark SQL para a criação de tabelas C-Store, que utilizam o mecanismo de armazenamento XUANWU. A sintaxe do Spark SQL para tabelas C-Store inclui propriedades específicas do AnalyticDB não encontradas no Spark SQL open source.
Diferenças de sintaxe em relação ao Spark SQL open source
A criação de tabelas C-Store no AnalyticDB for MySQL exige chaves TBLPROPERTIES específicas do AnalyticDB (consulte Parâmetros). Para criar bancos de dados e consultar dados, o AnalyticDB for MySQL utiliza a mesma sintaxe do Spark SQL open source. Para obter detalhes, consulte a referência do Spark SQL open source.
Limitações
O Spark SQL só pode criar tabelas que utilizam o mecanismo de armazenamento XUANWU.
Sintaxe
CREATE TABLE [ IF NOT EXISTS ] table_identifier
[ ( column_name column_type [ COMMENT col_comment1 ], ... ) ]
USING adb
[ COMMENT table_comment ]
[ TBLPROPERTIES ( key1=val1, key2=val2, ... ) ]
Parâmetros
Parâmetros principais
|
Parâmetro |
Obrigatório |
Descrição |
|
|
Sim |
Nome da tabela. Utilize o formato |
|
|
Sim |
Nome da coluna. Para convenções de nomenclatura, consulte Convenções de nomenclatura. |
|
|
Sim |
Tipo de dados da coluna. Para tipos suportados, consulte Mapeamentos de tipos de dados. |
|
|
Sim |
Especifique que a tabela é uma tabela do AnalyticDB for MySQL. |
|
|
Não |
Comentário sobre a tabela. |
|
|
Não |
Pares chave-valor que definem as propriedades da tabela. Consulte os parâmetros TBLPROPERTIES abaixo. |
TBLPROPERTIES: propriedades obrigatórias
|
Propriedade |
Obrigatória |
Descrição |
|
|
Sim |
Tipo de distribuição. Valores válidos: |
|
|
Sim |
Colunas da chave de distribuição. Aceita múltiplas colunas. A chave de distribuição não pode ser alterada após a criação da tabela. |
|
|
Sim |
Política de armazenamento. Valores válidos: |
TBLPROPERTIES: propriedades opcionais
|
Propriedade |
Obrigatória |
Descrição |
|
|
Obrigatória quando |
Número de partições quentes para armazenamento híbrido. As partições são classificadas pelo valor da chave de partição em ordem decrescente — as primeiras N partições são partições quentes armazenadas em SSDs, e as demais são partições frias armazenadas no OSS. N deve ser um número inteiro positivo. Não defina esta propriedade para políticas de armazenamento |
|
|
Não |
Colunas da chave primária. Uma chave primária deve incluir a chave de distribuição e a chave de partição. Posicione a chave de distribuição e a chave de partição no início de uma chave primária composta. |
|
|
Não |
Tipo de partição. Defina como |
|
|
Não |
Coluna da chave de partição (subpartição). |
|
|
Não |
Ciclo de vida da partição — número máximo de subpartições por shard. Se você especificar uma chave de partição, também deverá definir |
|
|
Não |
Nomes dos índices, separados por vírgula. Exemplo: |
|
|
Não |
Tipo de índice para um índice nomeado. Valores válidos: |
|
|
Não |
Coluna indexada para um índice nomeado. Exemplo: |
|
|
Não |
Especifique se todas as colunas devem ser indexadas. Valores válidos: |
|
|
Não |
Mecanismo de armazenamento. O padrão é |
Políticas de armazenamento
|
Política |
Localização dos dados |
Desempenho |
Custo |
Quando usar |
|
|
Todas as partições em SSDs |
Melhor desempenho de consulta |
Mais alto |
Dados acessados frequentemente |
|
|
Todas as partições no OSS com armazenamento redundante de zona (multi-AZ) |
Inferior |
Econômico |
Dados raramente acessados |
|
|
Partições quentes em SSDs; partições frias no OSS |
Alto para dados recentes |
Equilibrado |
A frequência de acesso aos dados varia conforme a antiguidade; requer |
Exemplos
Criar uma tabela não particionada
-- Non-partitioned table with HASH distribution and COLD storage
CREATE TABLE orders (
order_id BIGINT NOT NULL COMMENT 'Order ID',
customer_id INT NOT NULL COMMENT 'Customer ID',
order_status STRING NOT NULL COMMENT 'Order status',
total_price BIGINT NOT NULL COMMENT 'Order amount',
order_date TIMESTAMP NOT NULL COMMENT 'Order date'
)
USING adb
TBLPROPERTIES (
'distributeType' = 'HASH',
'distributeColumns' = 'order_status',
'storagePolicy' = 'COLD'
);
Criar uma tabela particionada com ciclo de vida
-- Partitioned table with primary key, selective indexing, and partition lifecycle
CREATE TABLE customer (
customer_id BIGINT NOT NULL COMMENT 'Customer ID',
customer_name STRING NOT NULL COMMENT 'Customer name',
phone_num BIGINT NOT NULL COMMENT 'Phone number',
city_name STRING NOT NULL COMMENT 'City',
sex INT NOT NULL COMMENT 'Gender',
id_number STRING NOT NULL COMMENT 'ID card number',
home_address STRING NOT NULL COMMENT 'Home address',
office_address STRING NOT NULL COMMENT 'Office address',
age INT NOT NULL COMMENT 'Age',
login_time TIMESTAMP NOT NULL COMMENT 'Logon time'
)
USING adb
TBLPROPERTIES (
'distributeType' = 'HASH',
'primaryKey' = 'customer_id,phone_num,city_name',
'distributeColumns' = 'city_name',
'partitionType' = 'value',
'partitionColumn' = 'city_name',
'partitionCount' = 100,
'indexAll' = 'N',
'storagePolicy' = 'COLD'
);
Mapeamentos de tipos de dados
|
Tipo Spark SQL |
Tipo XIHE SQL |
|
BOOLEAN |
BOOLEAN |
|
TINYINT |
TINYINT |
|
SMALLINT |
SMALLINT |
|
INT |
INT |
|
INTEGER |
INTEGER |
|
BIGINT |
BIGINT |
|
FLOAT |
FLOAT |
|
DOUBLE |
DOUBLE |
|
BINARY |
BINARY |
|
DATE |
DATE |
|
STRING |
VARCHAR, TIME, POINT, JSON, ARRAY, MAP |
|
TIMESTAMP |
DATETIME, TIMESTAMP |