Les tâches planifiées DataWorks importent périodiquement les données d'une table partitionnée MaxCompute vers une table partitionnée Hologres. Cette méthode garantit l'intégrité et l'exactitude des données tout en améliorant l'efficacité du traitement.
Prérequis
Vous avez acheté et activé une instance Hologres. Pour plus d'informations, consultez la rubrique Achat d'une instance Hologres.
Vous avez activé MaxCompute et créé un projet. Pour plus d'informations, consultez la rubrique Activation de MaxCompute.
Vous avez activé DataWorks et créé un espace de travail. Pour plus d'informations, consultez la rubrique Création d'un espace de travail.
Remarques relatives à l'utilisation
Assurez-vous que le service de schéma n'est pas activé pour le locataire ou le projet MaxCompute. Pour plus d'informations sur les schémas, consultez la rubrique Opérations de schéma.
Préparation des données
Cette rubrique utilise comme exemple la table partitionnée dwd_product_movie_basic_info issue du jeu de données public public_data de MaxCompute. Le code suivant présente le schéma de la table.
-- DDL for the MaxCompute partitioned table
CREATE TABLE IF NOT EXISTS public_data.dwd_product_movie_basic_info(
movie_name STRING COMMENT 'The name of the movie.',
director STRING COMMENT 'The director.',
scriptwriter STRING COMMENT 'The scriptwriter.',
area STRING COMMENT 'The production region or country.',
actors STRING COMMENT 'The actors.',
`type` STRING COMMENT 'The genre.',
movie_length STRING COMMENT 'The movie duration.',
movie_date STRING COMMENT 'The release date.',
movie_language STRING COMMENT 'The language.',
imdb_url STRING COMMENT 'The IMDB ID.'
)
PARTITIONED BY (ds STRING) STORED AS ALIORC;
Procédure
-
Préparez les données MaxCompute.
Connectez-vous à la console DataWorks, basculez vers la région cible et, dans le volet de navigation de gauche, choisissez . Cliquez sur Go to Data Analysis. Dans le volet de navigation de gauche, cliquez sur l'icône
pour accéder à la page SQL Query.-
Sur la page SQL Query, saisissez l'instruction SQL suivante pour afficher les données de la partition
20170112, puis cliquez sur Run.SELECT * FROM public_data.dwd_product_movie_basic_info WHERE ds = '20170112';
-
Créez une table externe dans Hologres.
L'ordre des colonnes et les types de données de la table externe doivent correspondre à ceux de la table MaxCompute.
Accédez à la page de l'éditeur SQL HoloWeb.
Sous l'onglet SQL Editor, cliquez sur l'icône
pour ouvrir une fenêtre Ad-hoc Query. Dans la barre d'outils de la fenêtre de requête, sélectionnez le Instance Name et la Database de votre instance Hologres.-
Dans l'éditeur Ad-hoc Query, saisissez l'instruction suivante et cliquez sur Run.
L'instruction suivante utilise la commande
IMPORT FOREIGN SCHEMApour créer une table externe Hologres nomméedwd_product_movie_basic_info.IMPORT FOREIGN SCHEMA public_data LIMIT TO (dwd_product_movie_basic_info) FROM SERVER odps_server INTO public OPTIONS(if_table_exist 'update');
-
Créez une table interne dans Hologres.
Créez une table interne dans Hologres pour recevoir et stocker les données importées.
Sur la page de développement HoloWeb, cliquez sur Ad-hoc Query.
-
Dans la nouvelle fenêtre Ad-hoc Query, sélectionnez votre Instance Name et votre Database. Ensuite, saisissez l'instruction suivante dans l'éditeur SQL et cliquez sur Run.
Étant donné que cet exemple importe des données depuis une table partitionnée MaxCompute, la table de destination Hologres doit également être une table partitionnée.
RemarqueL'instruction DDL suivante est un exemple simple. Pour optimiser les performances des requêtes, définissez des index appropriés en fonction de vos besoins métier.
BEGIN; CREATE TABLE "public"."holo_dwd_product_movie_basic_info" ( "movie_name" TEXT, "director" TEXT, "scriptwriter" TEXT, "area" TEXT, "actors" TEXT, "type" TEXT, "movie_length" TEXT, "movie_date" TEXT, "movie_language" TEXT, "imdb_url" TEXT, "ds" TEXT ) PARTITION BY LIST (ds); CALL SET_TABLE_PROPERTY('"public"."holo_dwd_product_movie_basic_info"', 'orientation', 'column'); COMMENT ON COLUMN "public"."holo_dwd_product_movie_basic_info"."movie_name" IS 'The name of the movie.'; COMMENT ON COLUMN "public"."holo_dwd_product_movie_basic_info"."director" IS 'The director.'; COMMENT ON COLUMN "public"."holo_dwd_product_movie_basic_info"."scriptwriter" IS 'The scriptwriter.'; COMMENT ON COLUMN "public"."holo_dwd_product_movie_basic_info"."area" IS 'The production region or country.'; COMMENT ON COLUMN "public"."holo_dwd_product_movie_basic_info"."actors" IS 'The actors.'; COMMENT ON COLUMN "public"."holo_dwd_product_movie_basic_info"."type" IS 'The genre.'; COMMENT ON COLUMN "public"."holo_dwd_product_movie_basic_info"."movie_length" IS 'The movie duration.'; COMMENT ON COLUMN "public"."holo_dwd_product_movie_basic_info"."movie_date" IS 'The release date.'; COMMENT ON COLUMN "public"."holo_dwd_product_movie_basic_info"."movie_language" IS 'The language.'; COMMENT ON COLUMN "public"."holo_dwd_product_movie_basic_info"."imdb_url" IS 'The IMDB ID.'; COMMIT;
-
Développez la tâche d'importation de données.
Dans cette étape, créez un nœud Hologres SQL pour exécuter des travaux planifiés sur la table partitionnée.
Connectez-vous à la console DataWorks, accédez à la page Data Development et créez un nœud Hologres SQL. Pour plus d'informations, consultez la rubrique Nœud Hologres SQL.
-
Dans l'éditeur de nœud, saisissez les instructions suivantes.
Vous ne pouvez pas écrire directement des données partitionnées dans une table partitionnée parent dans Hologres. Vous devez d'abord créer une table partitionnée enfant correspondant à la valeur de clé de partition de la table source MaxCompute, puis importer les données dans la table enfant. La valeur de clé de partition est contrôlée par le paramètre
${bizdate}, que le système de planification attribue automatiquement pour permettre la planification périodique. Pour plus d'informations sur les paramètres de planification, consultez la rubrique Formats pris en charge des paramètres de planification.RemarqueLes données de partition importées doivent correspondre à la valeur de clé de partition (dans cet exemple,
ds). Sinon, une erreur se produit.Les deux scénarios suivants illustrent différentes approches. Choisissez-en une en fonction de vos besoins métier.
-
Scénario 1 : Importation de nouvelles données de partition.
-- Create a temporary child partitioned table. BEGIN; CREATE TABLE IF NOT EXISTS "public".tmp_holo_dwd_product_movie_basic_info_${bizdate} ( "movie_name" TEXT, "director" TEXT, "scriptwriter" TEXT, "area" TEXT, "actors" TEXT, "type" TEXT, "movie_length" TEXT, "movie_date" TEXT, "movie_language" TEXT, "imdb_url" TEXT, "ds" TEXT ); COMMIT; -- Refresh the foreign table schema. IMPORT FOREIGN SCHEMA public_data LIMIT TO (dwd_product_movie_basic_info) FROM SERVER odps_server INTO public OPTIONS(if_table_exist 'update'); -- Wait for 30 seconds before importing data to Hologres to prevent synchronization failures caused by slow metadata cache updates in Hologres. SELECT pg_sleep(30); -- Import data from MaxCompute to the temporary child partitioned table. INSERT INTO "public".tmp_holo_dwd_product_movie_basic_info_${bizdate} SELECT "movie_name", "director", "scriptwriter", "area", "actors", "type", "movie_length", "movie_date", "movie_language", "imdb_url", "ds" FROM "public".dwd_product_movie_basic_info WHERE ds='${bizdate}'; -- Import the new partition data. BEGIN; ALTER TABLE tmp_holo_dwd_product_movie_basic_info_${bizdate} RENAME TO holo_dwd_product_movie_basic_info_${bizdate}; -- Attach the new child partitioned table to the parent partitioned table. ALTER TABLE holo_dwd_product_movie_basic_info ATTACH PARTITION holo_dwd_product_movie_basic_info_${bizdate} FOR VALUES IN ('${bizdate}'); COMMIT; -
Scénario 2 : Actualisation des données de partition historiques.
-- Create a temporary child partitioned table. BEGIN; CREATE TABLE IF NOT EXISTS "public".tmp_holo_dwd_product_movie_basic_info_${bizdate} ( "movie_name" TEXT, "director" TEXT, "scriptwriter" TEXT, "area" TEXT, "actors" TEXT, "type" TEXT, "movie_length" TEXT, "movie_date" TEXT, "movie_language" TEXT, "imdb_url" TEXT, "ds" TEXT ); COMMIT; -- Refresh the foreign table schema. IMPORT FOREIGN SCHEMA public_data LIMIT TO (dwd_product_movie_basic_info) FROM SERVER odps_server INTO public OPTIONS(if_table_exist 'update'); -- Wait for 30 seconds before importing data to Hologres to prevent synchronization failures caused by slow metadata cache updates in Hologres. SELECT pg_sleep(30); -- Import data from MaxCompute to the temporary child partitioned table. INSERT INTO "public".tmp_holo_dwd_product_movie_basic_info_${bizdate} SELECT "movie_name", "director", "scriptwriter", "area", "actors", "type", "movie_length", "movie_date", "movie_language", "imdb_url", "ds" FROM "public".dwd_product_movie_basic_info WHERE ds='${bizdate}'; -- Refresh the historical partition data. BEGIN; ALTER TABLE IF EXISTS holo_dwd_product_movie_basic_info DETACH PARTITION holo_dwd_product_movie_basic_info_${bizdate}; DROP TABLE IF EXISTS holo_dwd_product_movie_basic_info_${bizdate}; ALTER TABLE tmp_holo_dwd_product_movie_basic_info_${bizdate} RENAME TO holo_dwd_product_movie_basic_info_${bizdate}; -- Attach the child partitioned table to the parent partitioned table. ALTER TABLE holo_dwd_product_movie_basic_info ATTACH PARTITION holo_dwd_product_movie_basic_info_${bizdate} FOR VALUES IN ('${bizdate}'); COMMIT;
-
-
Configurez les propriétés de planification.
Sur la page de l'éditeur de nœuds Hologres SQL, cliquez sur Configure Scheduling dans le volet de droite pour configurer les propriétés de planification du nœud.
RemarqueModifiez les paramètres suivants et laissez les autres à leurs valeurs par défaut.
-
Propriétés de base
|
**Parameter**
|
**Value**
| | --- | --- | |
Parameters
|
bizdate=${yyyymmdd}
| -
Propriétés temporelles : Dans la section Time Properties, définissez Scheduling Type sur Normal Scheduling, conservez la Validity Period par défaut (1970-01-01 à 9999-01-01), définissez Scheduling Cycle sur Day, définissez Timeout sur System Default et décochez Depends on Previous Cycle.
|
**Parameter**
|
**Value**
| | --- | --- | |
Instance generation mode
|
Immediately After Deployment
| |
Rerun
|
Allow upon Failure Only
| |
Scheduled time
|
00:05
| -
Dépendances de planification
Définissez la dépendance au nœud racine ou à un nœud parent existant en fonction de vos besoins métier. Commencez par définir Automatic Parsing sur On, puis cliquez sur Parse Lineage. Le système analyse automatiquement le nœud racine. Ensuite, définissez Automatic Parsing sur Off.
-
-
Publiez le nœud de planification.
Sur la page de l'éditeur de nœuds Hologres SQL, cliquez sur l'icône
dans la barre d'outils pour enregistrer le nœud.Cliquez sur l'icône
dans la barre d'outils pour soumettre le nœud.Dans la boîte de dialogue Submit New Version, saisissez une Change description.
Cliquez sur OK.
-
Exécutez le nœud dans Operation Center.
Sur la page de l'éditeur de nœuds Hologres SQL, cliquez sur O&M en haut à droite.
Dans le volet de navigation de gauche de la page Operation Center, choisissez Auto Triggered Nodes Maintenance > Recurring Job.
Sur la page Recurring Job, faites un clic droit sur le nœud et choisissez Backfill Data > Current Node.
Dans le volet de navigation de gauche, choisissez Assistant > Data Backfill pour afficher la tâche en cours d'exécution et son état.
-
Consultez les données.
Une fois la tâche exécutée, Hologres crée automatiquement une table partitionnée enfant pour les données de partition.
Créez un nœud Hologres SQL sur la page Data Development. Pour plus d'informations, consultez la rubrique Nœud Hologres SQL.
-
Sur la page de l'éditeur de nœuds, saisissez les instructions suivantes pour interroger les données.
-
Consultez les données de la table partitionnée enfant.
SELECT * FROM holo_dwd_product_movie_basic_info_20170112; -
Consultez le nombre total de lignes dans la table partitionnée parent.
SELECT COUNT (*) FROM holo_dwd_product_movie_basic_info;
-