Les opérations DDL de Tablestore créent des mappages SQL pour les tables de données ou les index de recherche existants et gèrent le schéma ainsi que les métadonnées des tables de mappage.
Présentation des instructions DDL
|
Instruction |
Moteur |
Description |
|
CREATE TABLE |
tablestore |
Crée un mappage pour une table de données. Le moteur SQL sélectionne automatiquement l'index optimal pour les requêtes. |
|
CREATE TABLE |
searchindex |
Crée un mappage pour un index de recherche. Le moteur SQL exécute les requêtes via l'index de recherche spécifié. |
|
ALTER TABLE |
- |
Ajoute ou supprime des colonnes d'attribut dans une table de mappage existante. |
|
DROP MAPPING TABLE |
- |
Supprime un mappage sans affecter la table de données ou l'index sous-jacent. |
|
DESCRIBE |
- |
Renvoie les noms de champ, les types de données, les indicateurs de clé primaire et la possibilité de valeurs NULL d'une table de mappage. |
|
SHOW INDEX |
- |
Renvoie les informations d'index associées à une table de mappage, y compris les clés primaires, les index secondaires et les index de recherche. |
|
SHOW TABLES |
- |
Liste toutes les tables de mappage de l'instance actuelle. |
Contrairement aux bases de données relationnelles traditionnelles, l'instruction CREATE TABLE dans Tablestore ne crée pas de table physique. Elle crée plutôt un mappage d'accès SQL pour une table de données ou un index de recherche existant. L'instruction DROP MAPPING TABLE supprime uniquement le mappage et laisse les données sous-jacentes intactes.
Créer un mappage de table de données
Une instruction CREATE TABLE avec ENGINE='tablestore' crée un mappage pour une table de données existante. Une fois le mappage créé, le moteur SQL sélectionne automatiquement l'index optimal (clé primaire, index secondaire ou index de recherche) pour exécuter les requêtes.
Syntaxe
CREATE TABLE [IF NOT EXISTS] table_name(
column_name data_type [NOT NULL | NULL], ...
PRIMARY KEY(key_part [, key_part])
)
ENGINE='tablestore',
ENGINE_ATTRIBUTE='{"consistency": consistency [,"allow_inaccurate_aggregation": allow_inaccurate_aggregation]}';
Pour les tables comportant une seule colonne de clé primaire, spécifiez PRIMARY KEY directement dans la définition de la colonne :
CREATE TABLE [IF NOT EXISTS] table_name(
column_name data_type PRIMARY KEY,
column_name data_type [NOT NULL | NULL], ...
)
ENGINE='tablestore',
ENGINE_ATTRIBUTE='{"consistency": consistency}';
Paramètres
|
Paramètre |
Obligatoire |
Description |
|
|
IF NOT EXISTS |
Non |
Si spécifié, aucune erreur n'est renvoyée lorsque la table de mappage existe déjà. Sinon, une erreur |
|
|
table_name |
Oui |
Nom de la table de mappage. Ce nom doit correspondre au nom de la table de données. |
|
|
column_name |
Oui |
Nom de la colonne. Les noms de colonnes en SQL doivent correspondre aux noms de colonnes de la table de données (insensibles à la casse). Par exemple, si la colonne de la table de données est |
|
|
data_type |
Oui |
Type de données SQL de la colonne. Le type de données doit correspondre au type de données de la colonne dans la table de données. Les colonnes de clé primaire prennent uniquement en charge BIGINT, VARCHAR(1024) et VARBINARY(1024). Les colonnes d'attribut prennent également en charge DOUBLE, BOOL, MEDIUMTEXT et MEDIUMBLOB. Pour le mappage complet des types, consultez Mappages de types de données en SQL. |
|
|
NOT NULL \ |
NULL |
Non |
Indique si la colonne autorise les valeurs NULL. Les colonnes de clé primaire ont par défaut la valeur NOT NULL. Les colonnes d'attribut ont par défaut la valeur NULL. Spécifiez NOT NULL pour les colonnes d'attribut qui doivent avoir une valeur. |
|
PRIMARY KEY |
Oui |
Définition de la clé primaire. La clé primaire doit correspondre aux colonnes de clé primaire de la table de données, dans l'ordre et selon le type. |
|
|
ENGINE |
Non |
Type de moteur d'exécution. La valeur par défaut est |
|
|
consistency |
Non |
Niveau de cohérence des résultats de requête. Valeurs valides : |
|
|
allow_inaccurate_aggregation |
Non |
Indique s'il faut sacrifier la précision de l'agrégation pour améliorer les performances des requêtes. La valeur par défaut est |
Exemples
Créez un mappage pour exampletable avec les colonnes de clé primaire colvalue (VARCHAR) et id (BIGINT), ainsi qu'une colonne d'attribut content (MEDIUMTEXT) :
CREATE TABLE exampletable(colvalue VARCHAR(1024), id BIGINT, content MEDIUMTEXT, PRIMARY KEY(colvalue, id)) ENGINE='tablestore';
Créez un mappage avec une cohérence forte :
CREATE TABLE exampletable2(id BIGINT(20), colvalue VARCHAR(1024), content MEDIUMTEXT, PRIMARY KEY(colvalue, id)) ENGINE_ATTRIBUTE='{"consistency": "strong"}';
Créer un mappage d'index de recherche
Pour créer un mappage pour un index de recherche existant, utilisez une instruction CREATE TABLE avec ENGINE='searchindex'. Une fois le mappage créé, le moteur SQL exécute toutes les requêtes via l'index de recherche spécifié.
Cas d'utilisation
Les fonctionnalités d'index de recherche telles que la recherche en texte intégral, la recherche vectorielle ou les requêtes de type imbriqué sont requises.
Le routage des requêtes doit être épinglé à un index de recherche spécifique au lieu de s'appuyer sur la sélection automatique d'index par le moteur SQL.
Syntaxe
CREATE TABLE [IF NOT EXISTS] user_defined_name(
column_name data_type [, column_name data_type]
)
ENGINE='searchindex',
ENGINE_ATTRIBUTE='{"index_name": index_name, "table_name": table_name}';
Paramètres
|
Paramètre |
Obligatoire |
Description |
|
IF NOT EXISTS |
Non |
Si spécifié, aucune erreur n'est renvoyée lorsque la table de mappage existe déjà. |
|
user_defined_name |
Oui |
Nom personnalisé de la table de mappage. Le nom n'a pas besoin de correspondre au nom de la table de données ou de l'index. |
|
column_name |
Oui |
Nom de la colonne. Les définitions de clé primaire ne sont pas requises. Les tables de mappage d'index de recherche ne prennent pas en charge le type VARCHAR. Utilisez MEDIUMTEXT pour les colonnes de chaîne. |
|
index_name |
Oui |
Nom de l'index de recherche. Spécifié dans ENGINE_ATTRIBUTE. L'index doit déjà exister. |
|
table_name |
Oui |
Nom de la table de données à laquelle appartient l'index de recherche. Spécifié dans ENGINE_ATTRIBUTE. |
Exemples
Créez une table de mappage search_exampletable1 pour l'index de recherche exampletable1_index sur la table de données exampletable1 :
CREATE TABLE search_exampletable1(id BIGINT, colvalue MEDIUMTEXT, content MEDIUMTEXT) ENGINE='searchindex' ENGINE_ATTRIBUTE='{"index_name": "exampletable1_index", "table_name": "exampletable1"}';
Utilisez IF NOT EXISTS pour éviter les erreurs lorsque le mappage existe déjà :
CREATE TABLE IF NOT EXISTS search_exampletable1(id BIGINT, colvalue MEDIUMTEXT, content MEDIUMTEXT) ENGINE='searchindex' ENGINE_ATTRIBUTE='{"index_name": "exampletable1_index", "table_name": "exampletable1"}';
Mettre à jour les colonnes de la table de mappage
L'instruction ALTER TABLE ajoute ou supprime des colonnes d'attribut dans une table de mappage existante.
Seules les tables de mappage créées avec une instruction
CREATE TABLEprennent en chargeALTER TABLE. Les tables de mappage liées automatiquement parDESCRIBEou d'autres instructions ne prennent pas en charge cette opération.Chaque instruction ajoute ou supprime une colonne. Pour modifier plusieurs colonnes, exécutez l'instruction plusieurs fois.
ALTER TABLEmet uniquement à jour le schéma de la table de mappage et n'affecte pas la structure de stockage de la table de données.Les colonnes de clé primaire ne peuvent pas être ajoutées ni supprimées.
Après l'exécution de cette instruction, le moteur SQL actualise les données de manière asynchrone, ce qui peut prendre jusqu'à 30 secondes. Les requêtes effectuées pendant l'actualisation peuvent ne pas renvoyer la nouvelle colonne.
Syntaxe
ALTER TABLE table_name option column_name [data_type];
Paramètres
|
Paramètre |
Obligatoire |
Description |
|
table_name |
Oui |
Nom de la table de mappage. |
|
option |
Oui |
Type d'opération : |
|
column_name |
Oui |
Nom de la colonne. Lorsque vous ajoutez une colonne, le nom ne doit pas dupliquer un nom de colonne existant. Les règles de casse des noms de colonnes sont identiques à celles de |
|
data_type |
|
Type de données SQL de la colonne. Le type de données doit correspondre à la colonne correspondante dans la table de données. Non requis pour |
Exemples
Ajoutez des colonnes d'attribut à une table de mappage :
ALTER TABLE exampletable ADD COLUMN colvalue BIGINT;
ALTER TABLE exampletable ADD COLUMN content MEDIUMTEXT;
Supprimez une colonne d'attribut d'une table de mappage :
ALTER TABLE exampletable DROP COLUMN colvalue;
Supprimer un mappage
L'instruction DROP MAPPING TABLE supprime une ou plusieurs tables de mappage.
Cette instruction supprime uniquement le mappage SQL. La table de données sous-jacente et ses données ne sont pas affectées.
Syntaxe
DROP MAPPING TABLE [IF EXISTS] table_name, ...;
Paramètres
|
Paramètre |
Obligatoire |
Description |
|
table_name |
Oui |
Nom de la table de mappage. Séparez plusieurs noms par des virgules (,). |
|
IF EXISTS |
Non |
Si spécifié, aucune erreur n'est renvoyée lorsque le mappage n'existe pas. Sinon, une erreur |
Exemples
DROP MAPPING TABLE IF EXISTS exampletable;
Afficher les détails de la table
L'instruction DESCRIBE renvoie les noms de champ, les types de données, la possibilité de valeurs NULL et les indicateurs de clé primaire d'une table de mappage.
Syntaxe
DESCRIBE table_name;
Paramètres
|
Paramètre |
Obligatoire |
Description |
|
table_name |
Oui |
Nom de la table de mappage. |
Exemples
Consultez les détails de la table de mappage exampletable :
DESCRIBE exampletable;
La sortie contient les colonnes suivantes :
|
Colonne |
Exemple |
Description |
|
Field |
pk1 |
Nom du champ. |
|
Type |
varchar(1024) |
Type de données SQL du champ. |
|
Null |
NO |
Indique si le champ autorise les valeurs NULL. NO pour les colonnes de clé primaire. YES pour les colonnes d'attribut. |
|
Key |
PRI |
Indicateur de clé primaire. PRI indique une colonne de clé primaire. Une valeur vide indique une colonne d'attribut. |
Afficher les détails de l'index
L'instruction SHOW INDEX renvoie les index associés à une table de mappage, y compris les clés primaires, les index secondaires et les index de recherche.
Syntaxe
SHOW INDEX {FROM | IN} table_name;
Paramètres
|
Paramètre |
Obligatoire |
Description |
|
table_name |
Oui |
Nom de la table de mappage. |
Exemples
Consultez les index d'un mappage de table de données (renvoie la clé primaire, les index secondaires et les index de recherche) :
SHOW INDEX IN exampletable;
La colonne Index_type indique le type d'index : une valeur vide pour un index de clé primaire, GlobalIndex pour un index secondaire et SearchIndex pour un index de recherche.
Consultez les index d'un mappage d'index de recherche :
SHOW INDEX IN search_exampletable1;
Pour les tables de mappage d'index de recherche, SHOW INDEX renvoie _system_hidden_pk_field comme index de clé primaire (une clé primaire masquée générée par le système). Chaque colonne affiche également une valeur Search_type telle que LONG, KEYWORD ou TEXT.
Afficher les tables de mappage
SHOW TABLES liste toutes les tables de mappage de l'instance actuelle.
Syntaxe
SHOW TABLES;
Exemple de sortie :
+------------------------+
| Tables_in_myinstance |
+------------------------+
| exampletable |
+------------------------+
| search_exampletable1 |
+------------------------+
Erreurs courantes
Les erreurs suivantes peuvent se produire lorsqu'une instruction DDL échoue.
|
Message d'erreur |
Instruction |
Cause et solution |
|
Table 'instance.table' doesn't exist |
|
La table de données n'existe pas. |
|
Table 'instance.table' already exists |
|
Le mappage existe déjà. Pour supprimer cette erreur, utilisez |
|
Unknown mapping table 'instance.table' |
|
Le mappage n'existe pas. Pour supprimer cette erreur, utilisez |
|
Unsupported alter non-mapping table |
|
La table cible n'est pas une table de mappage créée avec |