OSS Load permet d'importer en une seule fois des centaines de gigaoctets de données depuis Object Storage Service (OSS) vers ApsaraDB for SelectDB via le réseau interne. L'importation s'exécute de manière asynchrone : après soumission de la tâche, SelectDB traite les fichiers en arrière-plan pendant que vous poursuivez vos activités.
Cas d'utilisation d'OSS Load
OSS Load est recommandé lorsque :
Vous devez importer de grands lots de fichiers (de quelques dizaines à plusieurs centaines de gigaoctets).
Vos fichiers sont stockés dans un bucket OSS situé dans la même région que votre instance SelectDB.
Vous devez charger des fichiers au format CSV, PARQUET ou ORC.
OSS Load utilise en interne le protocole S3 ; la syntaxe contient donc les mots-clés AWS et S3. Ce comportement est normal, car ApsaraDB for SelectDB prend en charge tout stockage objet compatible S3 et l'accès à OSS s'effectue via l'endpoint compatible S3.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Une paire d'AccessKey. Consultez la rubrique Create an AccessKey pair.
Un bucket OSS dans la même région que votre instance ApsaraDB for SelectDB. Reportez-vous à la documentation Get started by using the OSS console.
Un accès à OSS via un Virtual Private Cloud (VPC), car OSS Load emprunte l'endpoint VPC interne et non l'endpoint public.
Syntaxe
LOAD LABEL <load_label>
(
data_desc1[, data_desc2, ...]
)
WITH S3
(
"AWS_PROVIDER" = "OSS",
"AWS_REGION" = "<region>",
"AWS_ENDPOINT" = "<endpoint>",
"AWS_ACCESS_KEY" = "<AccessKey ID>",
"AWS_SECRET_KEY" = "<AccessKey secret>"
)
PROPERTIES
(
"key1" = "value1", ...
);
Le chemin du bucket OSS doit commencer par s3://.
Paramètres
Description des données (data_desc)
Chaque bloc data_desc décrit un ensemble de fichiers à importer. La syntaxe complète est la suivante :
[MERGE|APPEND|DELETE]
DATA INFILE
(
"file_path1"[, "file_path2", ...]
)
[NEGATIVE]
INTO TABLE `<table_name>`
[PARTITION (p1, p2, ...)]
[COLUMNS TERMINATED BY "<column_separator>"]
[FORMAT AS "<file_type>"]
[(column_list)]
[COLUMNS FROM PATH AS (c1, c2, ...)]
[PRECEDING FILTER predicate]
[SET (column_mapping)]
[WHERE predicate]
[DELETE ON expr]
[ORDER BY source_sequence]
[PROPERTIES ("key1"="value1", ...)]
| Paramètre | Description | ||
|---|---|---|---|
`MERGE |
APPEND |
DELETE` |
Type de fusion des données. Valeur par défaut : |
DATA INFILE |
Chemin du ou des fichiers à importer. Les caractères génériques sont pris en charge. Il doit s'agir d'un chemin de fichier et non d'un répertoire. | ||
NEGATIVE |
Importe les données selon une méthode négative qui inverse les valeurs entières des colonnes agrégées par SUM afin de compenser des données erronées précédemment importées. Cette option ne concerne que les tables utilisant l'agrégation SUM sur des colonnes entières. | ||
PARTITION (p1, p2, ...) |
Partitions cibles de l'importation. Les données n'appartenant pas aux partitions spécifiées sont ignorées. | ||
COLUMNS TERMINATED BY |
Délimiteur de colonnes. Valable uniquement pour les fichiers CSV. Doit être codé sur un seul octet. | ||
FORMAT AS |
Format de fichier. Valeurs autorisées : CSV, PARQUET, ORC. Valeur par défaut : CSV. |
||
column_list |
Ordre des colonnes dans le fichier source. Pour plus d'informations, consultez Converting source data. | ||
COLUMNS FROM PATH AS |
Colonnes à extraire depuis le chemin du fichier. | ||
PRECEDING FILTER predicate |
Conditions prédéfinies de filtrage des données. Celles-ci sont d'abord fusionnées séquentiellement avec les lignes sources selon les paramètres column list et COLUMNS FROM PATH AS, puis filtrées selon ces conditions. |
||
SET (column_mapping) |
Fonctions de transformation appliquées aux colonnes des données sources. | ||
WHERE predicate |
Conditions de filtrage appliquées aux données importées. | ||
DELETE ON expr |
Réservé au type MERGE. Spécifie la colonne delete_flag ainsi que sa condition. Applicable uniquement aux tables du modèle Unique Key. |
||
ORDER BY |
Colonne de séquençage pour l'importation. Garantit l'ordre des données lors de l'importation dans les tables du modèle Unique Key. | ||
PROPERTIES |
Paramètres de format supplémentaires. Pour les fichiers JSON, définissez json_root, jsonpaths et fuzzy_parse. |
Paramètres de connexion OSS (WITH S3)
| Paramètre | Description |
|---|---|
AWS_PROVIDER |
Fournisseur de stockage objet. Définissez cette valeur sur OSS. |
AWS_REGION |
Région où se trouve le bucket OSS. |
AWS_ENDPOINT |
Endpoint utilisé pour accéder aux données OSS. Consultez la page Regions and endpoints. Le bucket OSS et l'instance SelectDB doivent résider dans la même région. |
AWS_ACCESS_KEY |
AccessKey ID permettant l'accès à OSS. |
AWS_SECRET_KEY |
AccessKey secret permettant l'accès à OSS. |
Propriétés de la tâche (PROPERTIES)
| Paramètre | Valeur par défaut | Description |
|---|---|---|
timeout |
14400 (4 heures) |
Délai d'expiration de la tâche d'importation, exprimé en secondes. |
max_filter_ratio |
0 |
Proportion maximale de lignes pouvant être filtrées en raison de problèmes de qualité des données. Valeurs valides : 0 à 1. |
exec_mem_limit |
2147483648 (2 GiB) |
Mémoire maximale allouée à la tâche d'importation, en octets. |
strict_mode |
false |
Active ou désactive le mode strict pour la tâche d'importation. |
timezone |
Asia/Shanghai |
Fuseau horaire appliqué aux fonctions temporelles telles que strftime, alignment_timestamp et from_unixtime. Reportez-vous à la List of all time zones. |
load_parallelism |
1 |
Nombre de tâches d'importation simultanées. Augmentez cette valeur pour accélérer les importations volumineuses. |
send_batch_parallelism |
— | Nombre de tâches simultanées pour l'envoi des données par lots. Plafonné par le paramètre BE max_send_batch_parallelism_per_job. |
load_to_single_tablet |
false |
Indique si toutes les données doivent être importées dans un seul tablet par partition. Concerne uniquement les tables du modèle Duplicate Key avec partitionnement aléatoire. |
Importer des données depuis OSS
L'exemple suivant illustre la création d'une table, la préparation d'un fichier CSV d'exemple dans OSS, puis son chargement via OSS Load.
Étape 1 : Créez la table cible.
CREATE TABLE test_table
(
id int,
name varchar(50),
age int,
address varchar(50),
url varchar(500)
)
DISTRIBUTED BY HASH(id) BUCKETS 4
PROPERTIES("replication_num" = "1");
Étape 2 : Chargez votre fichier de données dans OSS.
Chargez un fichier CSV nommé test_file.txt dans votre bucket OSS. Le contenu du fichier doit ressembler à ceci :
1,yang,32,shanghai,http://example.com
2,wang,22,beijing,http://example.com
3,xiao,23,shenzhen,http://example.com
Étape 3 : Soumettez la tâche d'importation.
LOAD LABEL test_db.test_label_1
(
DATA INFILE("s3://your_bucket_name/test_file.txt")
INTO TABLE test_table
COLUMNS TERMINATED BY ","
)
WITH S3
(
"AWS_PROVIDER" = "OSS",
"AWS_REGION" = "oss-cn-beijing",
"AWS_ENDPOINT" = "oss-cn-beijing-internal.aliyuncs.com",
"AWS_ACCESS_KEY" = "<your_access_key>",
"AWS_SECRET_KEY" = "<your_secret_key>"
)
PROPERTIES
(
"timeout" = "3600"
);
L'instruction LOAD se compose de quatre parties :
LABEL : Identifiant unique de la tâche d'importation, permettant d'en consulter l'état et de l'annuler si nécessaire.
Déclaration des données : Chemin du fichier source, format et table de destination.
WITH S3 : Identifiants de connexion OSS et endpoint.
PROPERTIES : Paramètres au niveau de la tâche, tels que le délai d'expiration.
Surveiller et gérer les tâches d'importation
Vérifier l'état d'une tâche
OSS Load fonctionne de manière asynchrone. Après avoir soumis la tâche, utilisez la commande SHOW LOAD pour suivre sa progression.
SHOW LOAD
[FROM <db_name>]
[
WHERE
[LABEL [ = "your_label" | LIKE "label_matcher"]]
[STATE = ["PENDING"|"ETL"|"LOADING"|"FINISHED"|"CANCELLED"]]
]
[ORDER BY ...]
[LIMIT limit][OFFSET offset];
| Paramètre | Valeur par défaut | Description |
|---|---|---|
db_name |
Base de données courante | Base de données à interroger. |
LABEL |
— | Filtre par libellé. Prend en charge la correspondance exacte (=) et la correspondance par motif (LIKE). |
STATE |
— | Filtre par état de la tâche. |
ORDER BY |
— | Trie les résultats. |
LIMIT |
Tous les enregistrements | Nombre maximal d'enregistrements à retourner. |
OFFSET |
0 |
Nombre d'enregistrements à ignorer. |
Exemples :
Interrogez les tâches de la base example_db dont le libellé correspond à 2014_01_02, en retournant les 10 plus anciennes :
SHOW LOAD FROM example_db WHERE LABEL LIKE "2014_01_02" LIMIT 10;
Recherchez une tâche spécifique et triez les résultats par heure de début :
SHOW LOAD FROM example_db WHERE LABEL = "load_example_db_20140102" ORDER BY LoadStartTime DESC;
Listez les tâches actuellement à l'état LOADING :
SHOW LOAD FROM example_db WHERE LABEL = "load_example_db_20140102" AND STATE = "LOADING";
Effectuez une requête paginée (ignorez les 5 premiers résultats, retournez les 10 suivants) :
SHOW LOAD FROM example_db ORDER BY LoadStartTime DESC LIMIT 5,10;
SHOW LOAD FROM example_db ORDER BY LoadStartTime DESC LIMIT 10 OFFSET 5;
Annuler une tâche d'importation
Annulez toute tâche n'ayant pas encore atteint l'état FINISHED ou CANCELLED. Après l'annulation, toutes les données écrites par la tâche font l'objet d'une restauration (rollback).
CANCEL LOAD
[FROM <db_name>]
WHERE [LABEL = "<load_label>" | LABEL LIKE "<label_pattern>"];
| Paramètre | Valeur par défaut | Description |
|---|---|---|
db_name |
Base de données courante | Base de données contenant la tâche d'importation. |
load_label |
— | Libellé de la tâche à annuler. Prend en charge la correspondance exacte ainsi que la correspondance par motif via LABEL LIKE. |
Exemples :
Annulez une tâche spécifique :
CANCEL LOAD
FROM example_db
WHERE LABEL = "example_db_test_load_label";
Annulez toutes les tâches dont le libellé commence par example_ :
CANCEL LOAD
FROM example_db
WHERE LABEL LIKE "example_";
Résolution des problèmes
Expiration du délai d'importation
Le délai d'expiration par défaut est de 4 heures (14 400 secondes). Si une tâche dépasse cette limite, évitez de simplement augmenter le paramètre timeout : les nouvelles tentatives longues deviennent coûteuses lorsqu'une tâche échoue tardivement.
Privilégiez plutôt le découpage des fichiers volumineux en fichiers plus petits, puis lancez plusieurs tâches d'importation distinctes.
Si le volume de données reste raisonnable mais que la tâche expire tout de même, augmentez la valeur de load_parallelism afin d'exécuter davantage de tâches en parallèle, puis ajustez le paramètre timeout en conséquence.