Choisissez entre SQLTask, Tunnel ou DataWorks pour exporter les résultats des requêtes SQL MaxCompute en fonction de la taille et de la complexité de votre jeu de données.
Tous les exemples de code SDK sont écrits en Java.
Vue d'ensemble
Les méthodes suivantes permettent d'exporter les résultats des requêtes SQL :
Pour les petits jeux de données, utilisez SQLTask afin de récupérer l'intégralité du résultat de la requête.
Pour exporter une table ou une partition complète, faites appel à Tunnel.
Pour les requêtes SQL complexes, combinez SQLTask et Tunnel.
Utilisez DataWorks pour exécuter des requêtes SQL, synchroniser les données et configurer des tâches planifiées ainsi que leurs dépendances.
Utilisez l'outil open source DataX pour exporter les données depuis MaxCompute vers une source de données de destination.
Utiliser SQLTask
Le SDK SQLTask appelle l'interface SQL de MaxCompute. Exécutez SQLTask.getResult(i) pour lancer une requête et récupérer les résultats.
Points d'attention :
SQLTask.getResult(i) n'exporte que les résultats des requêtes SELECT. Cette méthode ne prend pas en charge d'autres commandes telles que show tables.
La propriété READ_TABLE_MAX_ROW détermine le nombre d'enregistrements renvoyés par une instruction SELECT. Configurez-la dans la section Opérations sur le projet.
Les instructions SELECT renvoient au maximum 10 000 enregistrements au client. L'exécution d'une instruction SELECT sur un client, y compris via SQLTask, équivaut à ajouter
LIMIT N.
Utiliser Tunnel
Exportez des tables entières ou des partitions spécifiques à l'aide de l'outil en ligne de commande Tunnel ou du SDK Tunnel.
L'exemple suivant illustre l'exportation de données via une commande Tunnel. Pour les scénarios basés sur le SDK non pris en charge par l'interface CLI, consultez la rubrique Vue d'ensemble du canal de données par lots.
tunnel d wc_out c:\wc_out.dat;
2016-12-16 19:32:08 - new session: 201612161932082d3c9b0a012f68e7 total lines: 3
2016-12-16 19:32:08 - file [0]: [0, 3), c:\wc_out.dat
downloading 3 records into 1 file
2016-12-16 19:32:08 - file [0] start
2016-12-16 19:32:08 - file [0] OK. total: 21 bytes
download OK
Combiner SQLTask et Tunnel
SQLTask renvoie au maximum 10 000 enregistrements, tandis que Tunnel n'impose aucune limite de ce type. Combinez ces deux outils pour exporter des jeux de données plus volumineux.
Exemple :
Odps odps = OdpsUtils.newDefaultOdps(); // Initialize the Odps object.
Instance i = SQLTask.run(odps, "select * from wc_in;");
i.waitForSuccess();
// Create an InstanceTunnel.
InstanceTunnel tunnel = new InstanceTunnel(odps);
// Create a DownloadSession based on the instance ID.
InstanceTunnel.DownloadSession session = tunnel.createDownloadSession(odps.getDefaultProject(), i.getId());
long count = session.getRecordCount();
// Print the number of records.
System.out.println(count);
// The method for retrieving data is the same as with TableTunnel.
TunnelRecordReader reader = session.openRecordReader(0, count);
Record record;
while((record = reader.read()) != null)
{
for(int col = 0; col < session.getSchema().getColumns().size(); ++col)
{
// The columns in the wc_in table are all of the STRING type. You can print the output directly or write it to a local file.
System.out.println(record.get(col));
}
}
reader.close();
Utiliser la synchronisation des données DataWorks
Cet exemple repose sur le mode basique de DataWorks et ne s'applique pas aux espaces de travail en aperçu public. Lors de la création d'un espace de travail, ne sélectionnez pas Join The Public Preview Of DataStudio.
Utilisez DataWorks pour exécuter des requêtes SQL et configurer des tâches de synchronisation des données.
Connectez-vous à la console DataWorks.
Dans le volet de navigation de gauche, cliquez sur Workspace.
Dans la colonne Actions correspondant à l'espace de travail cible, choisissez Shortcuts > Data Development.
-
Créez un workflow.
Faites un clic droit sur Business Flow et sélectionnez Create Workflow.
Saisissez un Name.
Cliquez sur Create.
-
Créez un nœud SQL.
Faites un clic droit sur le workflow et choisissez .
Définissez le Name sur runsql et cliquez sur OK.
Configurez le nœud ODPS SQL, puis cliquez sur Save.
-
Créez un nœud de synchronisation des données.
Faites un clic droit sur le workflow et choisissez .
Définissez le Name sur sync2mysql et cliquez sur OK.
Sélectionnez la source et la destination des données.
Configurez le mappage des champs.
Configurez le contrôle du canal.
Cliquez sur Save.
Reliez le nœud ODPS SQL au nœud de synchronisation des données afin que le nœud SQL produise les données destinées à l'exportation par le nœud de synchronisation.
-
Configurez la planification du workflow ou conservez les paramètres par défaut, puis cliquez sur Run. Voici un exemple de journaux d'exécution :
2016-12-17 23:43:46.394 [job-15598025] INFO JobContainer - Task start time : 2016-12-17 23:43:34 Task end time : 2016-12-17 23:43:46 Total time consumed : 11s Average traffic : 31.36KB/s Record write speed : 1668rec/s Total records read : 16689 Total read/write failures : 0 -
Vérifiez le résultat de la synchronisation :
select count(*) from result_in_db;