AnalyticDB for MySQL prend en charge Spark SQL pour la création de tables C-Store reposant sur le moteur de stockage XUANWU. La syntaxe Spark SQL dédiée aux tables C-Store intègre des propriétés spécifiques à AnalyticDB absentes de la version open source de Spark SQL.
Différences syntaxiques par rapport à Spark SQL open source
La création de tables C-Store dans AnalyticDB for MySQL nécessite des clés TBLPROPERTIES spécifiques à AnalyticDB (voir les Paramètres). En revanche, pour la création de bases de données et l'interrogation des données, AnalyticDB for MySQL utilise la même syntaxe que Spark SQL open source. Pour plus de détails, consultez la documentation de référence Spark SQL open source.
Limitations
Spark SQL permet uniquement de créer des tables utilisant le moteur de stockage XUANWU.
Syntaxe
CREATE TABLE [ IF NOT EXISTS ] table_identifier
[ ( column_name column_type [ COMMENT col_comment1 ], ... ) ]
USING adb
[ COMMENT table_comment ]
[ TBLPROPERTIES ( key1=val1, key2=val2, ... ) ]
Paramètres
Paramètres principaux
| Paramètre | Obligatoire | Description |
|---|---|---|
table_identifier |
Oui | Nom de la table. Utilisez le format db_name.table_identifier pour distinguer les tables homonymes dans différentes bases de données. Pour connaître les conventions d'attribution des noms, consultez la section Conventions d'attribution des noms. |
column_name |
Oui | Nom de la colonne. Pour connaître les conventions d'attribution des noms, consultez la section Conventions d'attribution des noms. |
column_type |
Oui | Type de données de la colonne. Pour consulter la liste des types pris en charge, reportez-vous à la section Mappages des types de données. |
USING adb |
Oui | Indique que la table est une table AnalyticDB for MySQL. |
COMMENT |
Non | Commentaire associé à la table. |
TBLPROPERTIES |
Non | Paires clé-valeur définissant les propriétés de la table. Consultez les paramètres TBLPROPERTIES ci-dessous. |
TBLPROPERTIES : propriétés obligatoires
| Propriété | Obligatoire | Description |
|---|---|---|
distributeType |
Oui | Type de distribution. Valeurs acceptées : HASH (répartit les données de la table entre les shards selon les valeurs de hachage des colonnes de la clé de distribution) et BROADCAST (stocke une copie complète de la table dans chaque shard ; maintenez une taille réduite pour les tables répliquées). |
distributeColumns |
Oui | Colonnes constituant la clé de distribution. Plusieurs colonnes sont acceptées. La clé de distribution ne peut pas être modifiée après la création de la table. |
storagePolicy |
Oui | Politique de stockage. Valeurs acceptées : HOT (valeur par défaut), COLD et MIXED. La casse n'est pas prise en compte. Pour plus de détails, consultez la section Politiques de stockage. |
TBLPROPERTIES : propriétés facultatives
| Propriété | Obligatoire | Description |
|---|---|---|
hotPartitionCount |
Obligatoire si storagePolicy=MIXED |
Nombre de partitions chaudes pour le stockage hybride. Les partitions sont triées par valeur de clé de partition par ordre décroissant : les N premières partitions sont des partitions chaudes stockées sur des disques SSD, tandis que les partitions restantes sont des partitions froides stockées dans OSS. N doit être un entier positif. Ne définissez pas cette propriété pour les politiques de stockage HOT ou COLD. |
primaryKey |
Non | Colonnes constituant la clé primaire. Une clé primaire doit inclure la clé de distribution et la clé de partition. Placez la clé de distribution et la clé de partition au début d'une clé primaire composite. |
partitionType |
Non | Type de partition. Définissez la valeur sur VALUE. |
partitionColumn |
Non | Colonne de clé de partition (sous-partition). |
partitionCount |
Non | Cycle de vie des partitions — nombre maximal de sous-partitions par shard. Si vous spécifiez une clé de partition, vous devez également définir partitionCount, sinon une erreur est renvoyée. Par exemple, 'partitionCount'='365' signifie que chaque shard conserve au maximum 365 sous-partitions. Si une colonne de date sert de clé de partition, les données du jour 1 sont automatiquement supprimées lorsque de nouvelles données arrivent le jour 366. |
indexName |
Non | Noms des index, séparés par des virgules. Exemple : 'indexName'='index1,index2'. |
indexType |
Non | Type d'index pour un index nommé. Valeurs acceptées : FULLTEXT (index en texte intégral) et NORMAL (index standard). Exemple : 'indexType.index1'='FULLTEXT'. |
indexColumn |
Non | Colonne indexée pour un index nommé. Exemple : 'indexColumn.index1'='c1'. |
indexAll |
Non | Indique s'il faut indexer toutes les colonnes. Valeurs acceptées : Y (valeur par défaut) et N. |
tableEngineName |
Non | Moteur de stockage. La valeur par défaut est XUANWU. |
Politiques de stockage
| Politique | Emplacement des données | Performances | Coût | Cas d'utilisation |
|---|---|---|---|---|
HOT (par défaut) |
Toutes les partitions sur des disques SSD | Meilleures performances de requête | Le plus élevé | Accès fréquent aux données |
COLD |
Toutes les partitions dans OSS avec stockage redondant interzones (multi-AZ) | Inférieures | Économique | Accès rare aux données |
MIXED |
Partitions chaudes sur des disques SSD ; partitions froides dans OSS | Élevées pour les données récentes | Équilibré | Fréquence d'accès aux données variable selon l'ancienneté ; nécessite hotPartitionCount |
Exemples
Créer une table non partitionnée
-- 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'
);
Créer une table partitionnée avec un cycle de vie
-- 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'
);
Mappages des types de données
| Type Spark SQL | Type 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 |