Le kit de développement logiciel (SDK) Java fournit un ensemble d'interfaces de programmation pour MaxCompute. Utilisez ce SDK pour gérer les projets, les tables, les transferts de données et les fonctions via du code Java. Cette rubrique présente le SDK Java, en abordant notamment les instances, les ressources, les tables et les fonctions.
Les frais de calcul et de stockage liés à l'utilisation du SDK pour appeler MaxCompute sont identiques à ceux appliqués lors de l'utilisation directe de MaxCompute.
Informations générales
Cette rubrique décrit les interfaces principales courantes de MaxCompute. Pour plus d'informations, consultez la documentation SDK Java Doc.
Utilisez Maven pour gérer et configurer la version du SDK. Le code suivant illustre une configuration Maven type.
<dependency>
<groupId>com.aliyun.odps</groupId>
<artifactId>odps-sdk-core</artifactId>
<version>X.X.X-public</version>
</dependency>
Seules les versions 0.27.2-public et ultérieures prennent en charge les nouveaux types de données de MaxCompute V2.0.
Recherchez odps-sdk-core sur search.maven.org pour obtenir la dernière version du SDK.
Le tableau suivant décrit les packages SDK fournis par MaxCompute.
|
Nom du package |
Description |
|
odps-sdk-core |
Contient les fonctionnalités de base de MaxCompute, telles que les opérations sur les tables et les projets, ainsi que le tunnel. |
|
odps-sdk-commons |
Contient les encapsulations Util. |
|
odps-sdk-udf |
Interfaces principales pour la fonctionnalité UDF. |
|
odps-sdk-mapred |
Fonctionnalité MapReduce. |
|
odps-sdk-graph |
SDK Graph Java. Recherchez le mot-clé odps-sdk-graph. |
AliyunAccount
Représente un compte Alibaba Cloud. Les paramètres d'entrée sont un AccessKey ID et un AccessKey secret. Ils servent d'identifiant et de clé d'authentification pour un compte Alibaba Cloud. Utilisez cette classe pour initialiser MaxCompute.
ODPS
Point d'entrée du SDK MaxCompute. Utilisez cette classe pour obtenir toutes les collections d'objets d'un projet, telles que les Projects, les Tables, les Resources, les Functions et les Instances.
Construisez un objet MaxCompute en transmettant une instance AliyunAccount. L'exemple de code suivant illustre cette procédure.
// An AccessKey for an Alibaba Cloud account has all API access permissions, which poses a high security threat. Create and use a Resource Access Management (RAM) user for API calls or routine O&M. Log on to the RAM console to create a RAM user.
// This example shows how to store the AccessKey and AccessKey secret in environment variables. You can also store them in a configuration file as needed.
// Do not save the AccessKey and AccessKey secret in your code. This prevents key leaks.
Account account = new AliyunAccount(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
Odps odps = new Odps(account);
String odpsUrl = "<your odps endpoint>";
odps.setEndpoint(odpsUrl);
odps.setDefaultProject("my_project");
for (Table t : odps.tables()) {
....
}
Tunnel de données par lots
Le tunnel de données MaxCompute Tunnel repose sur le SDK Tunnel. Utilisez le SDK Tunnel pour charger ou télécharger des données vers et depuis les tables MaxCompute. Les vues ne sont pas prises en charge.
MapReduce
Pour plus d'informations sur les SDK pris en charge par MapReduce, consultez la Présentation du SDK natif.
Projects
Représente la collection de tous les projets dans MaxCompute. Les éléments de la collection sont des objets Project. L'exemple de code suivant illustre cette procédure.
// An AccessKey for an Alibaba Cloud account has all API access permissions, which poses a high security threat. Create and use a Resource Access Management (RAM) user for API calls or routine O&M. Log on to the RAM console to create a RAM user.
// This example shows how to store the AccessKey and AccessKey secret in environment variables. You can also store them in a configuration file as needed.
// Do not save the AccessKey and AccessKey secret in your code. This prevents key leaks.
Account account = new AliyunAccount(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
Odps odps = new Odps(account);
String odpsUrl = "<your odps endpoint>";
odps.setEndpoint(odpsUrl);
Project p = odps.projects().get("my_exists");
p.reload();
...
Project
Représente un projet et ses informations. Obtenez le projet correspondant à partir de la collection Projects.
SQLTask
SQLTask est une interface permettant d'exécuter et de traiter des tâches SQL. Exécutez directement des instructions SQL à l'aide de l'interface run.
L'interface run renvoie une Instance, que vous pouvez utiliser pour récupérer l'état d'exécution et le résultat de l'instruction SQL. L'exemple de code suivant illustre cette procédure.
import java.util.List;
import com.aliyun.odps.Instance;
import com.aliyun.odps.Odps;
import com.aliyun.odps.OdpsException;
import com.aliyun.odps.account.Account;
import com.aliyun.odps.account.AliyunAccount;
import com.aliyun.odps.data.Record;
import com.aliyun.odps.task.SQLTask;
public class TestSql {
// An AccessKey for an Alibaba Cloud account has all API access permissions, which poses a high security threat. Create and use a Resource Access Management (RAM) user for API calls or routine O&M. Log on to the RAM console to create a RAM user.
// This example shows how to store the AccessKey and AccessKey secret in environment variables. You can also store them in a configuration file as needed.
// Do not save the AccessKey and AccessKey secret in your code. This prevents key leaks.
private static String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
private static String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
private static final String endPoint = "http://service.odps.aliyun.com/api";
private static final String project = "";
private static final String sql = "select category from iris;";
public static void
main(String[] args) {
Account account = new AliyunAccount(accessId, accessKey);
Odps odps = new Odps(account);
odps.setEndpoint(endPoint);
odps.setDefaultProject(project);
Instance i;
try {
i = SQLTask.run(odps, sql);
i.waitForSuccess();
List<Record> records = SQLTask.getResult(i);
for(Record r:records){
System.out.println(r.get(0).toString());
}
} catch (OdpsException e) {
e.printStackTrace();
}
}
}
Vous ne pouvez soumettre et exécuter qu'une seule instruction SQL à la fois.
Pour créer une table, utilisez l'interface SQLTask plutôt que l'interface Table. Transmettez l'instruction table operation à l'interface SQLTask.
Instances
Représente la collection de toutes les instances dans MaxCompute. Les éléments de la collection sont des objets Instance. L'exemple de code suivant illustre cette procédure.
// An AccessKey for an Alibaba Cloud account has all API access permissions, which poses a high security threat. Create and use a Resource Access Management (RAM) user for API calls or routine O&M. Log on to the RAM console to create a RAM user.
// This example shows how to store the AccessKey and AccessKey secret in environment variables. You can also store them in a configuration file as needed.
// Do not save the AccessKey and AccessKey secret in your code. This prevents key leaks.
Account account = new AliyunAccount(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
Odps odps = new Odps(account);
String odpsUrl = "<your odps endpoint>";
odps.setEndpoint(odpsUrl);
odps.setDefaultProject("my_project");
for (Instance i : odps.instances()) {
....
}
Instance
Représente une instance et ses informations. Obtenez l'instance correspondante à partir de la collection Instances. L'exemple de code suivant illustre cette procédure.
// An AccessKey for an Alibaba Cloud account has all API access permissions, which poses a high security threat. Create and use a Resource Access Management (RAM) user for API calls or routine O&M. Log on to the RAM console to create a RAM user.
// This example shows how to store the AccessKey and AccessKey secret in environment variables. You can also store them in a configuration file as needed.
// Do not save the AccessKey and AccessKey secret in your code. This prevents key leaks.
Account account = new AliyunAccount(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
Odps odps = new Odps(account);
String odpsUrl = "<your odps endpoint>";
odps.setEndpoint(odpsUrl);
Instance instance= odps.instances().get("instance id");
Date startTime = instance.getStartTime();
Date endTime = instance.getEndTime();
...
Status instanceStatus = instance.getStatus();
String instanceStatusStr = null;
if (instanceStatus == Status.TERMINATED) {
instanceStatusStr = TaskStatus.Status.SUCCESS.toString();
Map<String, TaskStatus> taskStatus = instance.getTaskStatus();
for (Entry<String, TaskStatus> status : taskStatus.entrySet()) {
if (status.getValue().getStatus() != TaskStatus.Status.SUCCESS) {
instanceStatusStr = status.getValue().getStatus().toString();
break;
}
}
} else {
instanceStatusStr = instanceStatus.toString();
}
...
TaskSummary summary = instance.getTaskSummary("task name");
String s = summary.getSummaryText();
Tables
Représente la collection de toutes les tables dans MaxCompute. Les éléments de la collection sont des objets Table. L'exemple de code suivant illustre cette procédure.
// An AccessKey for an Alibaba Cloud account has all API access permissions, which poses a high security threat. Create and use a Resource Access Management (RAM) user for API calls or routine O&M. Log on to the RAM console to create a RAM user.
// This example shows how to store the AccessKey and AccessKey secret in environment variables. You can also store them in a configuration file as needed.
// Do not save the AccessKey and AccessKey secret in your code. This prevents key leaks.
Account account = new AliyunAccount(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
Odps odps = new Odps(account);
String odpsUrl = "<your odps endpoint>";
odps.setEndpoint(odpsUrl);
odps.setDefaultProject("my_project");
for (Table t : odps.tables()) {
....
}
Table
Représente une table et ses informations. Obtenez la table correspondante à partir de la collection Tables. L'exemple de code suivant illustre cette procédure.
// An AccessKey for an Alibaba Cloud account has all API access permissions, which poses a high security threat. Create and use a Resource Access Management (RAM) user for API calls or routine O&M. Log on to the RAM console to create a RAM user.
// This example shows how to store the AccessKey and AccessKey secret in environment variables. You can also store them in a configuration file as needed.
// Do not save the AccessKey and AccessKey secret in your code. This prevents key leaks.
Account account = new AliyunAccount(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
Odps odps = new Odps(account);
String odpsUrl = "<your odps endpoint>";
odps.setEndpoint(odpsUrl);
odps.setDefaultProject("my_project");
Table table = odps.tables().get("tablename");
for(Column c : table.getSchema().getColumns())
{
String name = c.getName();
TypeInfo type = c.getTypeInfo();
}
Utilisez le code suivant pour obtenir les données de partition de table.
// An AccessKey for an Alibaba Cloud account has all API access permissions, which poses a high security threat. Create and use a Resource Access Management (RAM) user for API calls or routine O&M. Log on to the RAM console to create a RAM user.
// This example shows how to store the AccessKey and AccessKey secret in environment variables. You can also store them in a configuration file as needed.
// Do not save the AccessKey and AccessKey secret in your code. This prevents key leaks.
Account account = new AliyunAccount(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
Odps odps = new Odps(account);
String odpsUrl = "<your odps endpoint>";
odps.setEndpoint(odpsUrl);
Table t = odps.tables().get("table name");
t.reload();
Partition part = t.getPartition(new PartitionSpec("partition_col=partition_col_value"));
part.reload();
...
Resources
Représente la collection de toutes les ressources dans MaxCompute. Les éléments de la collection sont des objets Resource. L'exemple de code suivant illustre cette procédure.
// An AccessKey for an Alibaba Cloud account has all API access permissions, which poses a high security threat. Create and use a Resource Access Management (RAM) user for API calls or routine O&M. Log on to the RAM console to create a RAM user.
// This example shows how to store the AccessKey and AccessKey secret in environment variables. You can also store them in a configuration file as needed.
// Do not save the AccessKey and AccessKey secret in your code. This prevents key leaks.
Account account = new AliyunAccount(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
Odps odps = new Odps(account);
String odpsUrl = "<your odps endpoint>";
odps.setEndpoint(odpsUrl);
odps.setDefaultProject("my_project");
for (Resource r : odps.resources()) {
....
}
Resource
Représente une ressource et ses informations. Obtenez la ressource correspondante à partir de la collection Resources. L'exemple de code suivant illustre cette procédure.
// An AccessKey for an Alibaba Cloud account has all API access permissions, which poses a high security threat. Create and use a Resource Access Management (RAM) user for API calls or routine O&M. Log on to the RAM console to create a RAM user.
// This example shows how to store the AccessKey and AccessKey secret in environment variables. You can also store them in a configuration file as needed.
// Do not save the AccessKey and AccessKey secret in your code. This prevents key leaks.
Account account = new AliyunAccount(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
Odps odps = new Odps(account);
String odpsUrl = "<your odps endpoint>";
odps.setEndpoint(odpsUrl);
Resource r = odps.resources().get("resource name");
r.reload();
if (r.getType() == Resource.Type.TABLE) {
TableResource tr = new TableResource(r);
String tableSource = tr.getSourceTable().getProject() + "."
+ tr.getSourceTable().getName();
if (tr.getSourceTablePartition() != null) {
tableSource += " partition(" + tr.getSourceTablePartition().toString()
+ ")";
}
....
}
L'exemple suivant montre comment créer une ressource de fichier.
String projectName = "my_porject";
String source = "my_local_file.txt";
File file = new File(source);
InputStream is = new FileInputStream(file);
FileResource resource = new FileResource();
String name = file.getName();
resource.setName(name);
odps.resources().create(projectName, resource, is);
L'exemple suivant montre comment créer une ressource de table.
TableResource resource = new TableResource(tableName, tablePrj, partitionSpec);
//resource.setName(INVALID_USER_TABLE);
resource.setName("table_resource_name");
odps.resources().update(projectName, resource);
Functions
Représente la collection de toutes les fonctions dans MaxCompute. Les éléments de la collection sont des objets Function. L'exemple de code suivant illustre cette procédure.
// An AccessKey for an Alibaba Cloud account has all API access permissions, which poses a high security threat. Create and use a Resource Access Management (RAM) user for API calls or routine O&M. Log on to the RAM console to create a RAM user.
// This example shows how to store the AccessKey and AccessKey secret in environment variables. You can also store them in a configuration file as needed.
// Do not save the AccessKey and AccessKey secret in your code. This prevents key leaks.
Account account = new AliyunAccount(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
Odps odps = new Odps(account);
String odpsUrl = "<your odps endpoint>";
odps.setEndpoint(odpsUrl);
odps.setDefaultProject("my_project");
for (Function f : odps.functions()) {
....
}
Function
Représente une fonction et ses informations. Obtenez la fonction correspondante à partir de la collection Functions. L'exemple de code suivant illustre cette procédure.
// An AccessKey for an Alibaba Cloud account has all API access permissions, which poses a high security threat. Create and use a Resource Access Management (RAM) user for API calls or routine O&M. Log on to the RAM console to create a RAM user.
// This example shows how to store the AccessKey and AccessKey secret in environment variables. You can also store them in a configuration file as needed.
// Do not save the AccessKey and AccessKey secret in your code. This prevents key leaks.
Account account = new AliyunAccount(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
Odps odps = new Odps(account);
String odpsUrl = "<your odps endpoint>";
odps.setEndpoint(odpsUrl);
Function f = odps.functions().get("function name");
List<Resource> resources = f.getResources();
L'exemple suivant montre comment créer une fonction.
String resources = "xxx:xxx";
String classType = "com.aliyun.odps.mapred.open.example.WordCount";
ArrayList<String> resourceList = new ArrayList<String>();
for (String r : resources.split(":")) {
resourceList.add(r);
}
Function func = new Function();
func.setName(name);
func.setClassType(classType);
func.setResources(resourceList);
odps.functions().create(projectName, func);
Références
Si vous souhaitez utiliser Python pour interagir avec MaxCompute et traiter des données, consultez la Présentation du SDK Python.