MaxCompute V2.0 vous permet d'utiliser des tables externes pour accéder à des services de stockage tels qu'Object Storage Service (OSS) et Tablestore. MaxCompute Studio fournit des modèles de code pour vous aider à interroger des données non structurées. Cette rubrique décrit comment utiliser MaxCompute Studio pour interroger des données non structurées.
Prérequis
Assurez-vous que les conditions suivantes sont remplies :
Un projet MaxCompute est connecté. Pour plus d'informations, reportez-vous à la section Gérer les connexions aux projets.
Un module Java MaxCompute a été créé. Pour plus d'informations, reportez-vous à la section Créer un module Java MaxCompute.
Écrire un programme StorageHandler, Extractor ou Outputer
Dans le volet Project, cliquez avec le bouton droit sur le répertoire source du module (c'est-à-dire ), puis sélectionnez .
-
Saisissez un Name, sélectionnez Extractor, StorageHandler ou Outputer comme type, puis appuyez sur Entrée.
Name : nom de la classe Java MaxCompute. Si aucun package n'a été créé, saisissez packagename.classname pour créer automatiquement un package.
-
Sélectionnez Extractor, StorageHandler ou Outputer comme type.
RemarqueVous pouvez sélectionner Extractor, StorageHandler ou Outputer en fonction de vos besoins métier.
Extractor : classe permettant de configurer une logique personnalisée pour la lecture de données non structurées.
StorageHandler : classe utilisée pour mettre en œuvre la logique définie dans le programme Extractor ou Outputer.
Outputer : classe permettant de configurer une logique personnalisée pour l'écriture de données non structurées.
Une fois la classe créée, développez un programme Java dans l'éditeur de code. Le modèle Java est automatiquement rempli avec le code du framework. Il vous suffit de compiler le code logique selon vos besoins.
Déboguer le programme Extractor ou Outputer
Vous pouvez vous inspirer des exemples de tests unitaires présents dans le répertoire examples pour écrire des cas de test.
import ...
public class ExtractorTest {
private String ambulanceFullSchema =
"vehicle:bigint;id:bigint;patient:bigint;calls:bigint;latitude:d...";
private String speechDataFullSchema = "sentence_snr:double;id:string";
@Test
public void testTextExtractor() throws Exception {
/**
* Equivalent to the following SQL:
* CREATE EXTERNAL TABLE ambulance_data_external
* ( vehicle bigint, id bigint, patient bigint, calls bigint,
* Latitude double, Longitude double, time string, direction string)
* STORED BY 'com.aliyun.odps.udf.example.text.TextStorageHandler'
* LOCATION 'oss://.../data/ambulance_csv/'
* USING 'jar_file_name.jar';
*
* SELECT * FROM ambulance_data_external;
*/
Column[] externalTableSchema = UnstructuredUtils.parseSchemaString(
ambulanceFullSchema);
}
}
Empaqueter et charger le programme
Après avoir débogué le programme, compressez-le dans un package JAR et chargez ce package sur le serveur MaxCompute en tant que ressource. Pour plus d'informations, reportez-vous à la section Empaqueter un programme Java, charger le package et créer une UDF MaxCompute.
Interroger des données non structurées
Dans la fenêtre d'outils Project, cliquez avec le bouton droit sur scripts et sélectionnez .
Dans le champ Script Name, saisissez un nom de script. Dans la liste déroulante MaxCompute Project, sélectionnez le projet cible. Puis, cliquez sur OK.
-
Dans l'éditeur de code, saisissez l'instruction SQL utilisée pour créer une table externe, puis cliquez sur l'icône
.--name:osd --author:liuyi --create time:2017-03-07 17:06 set odps.service.mode=off; CREATE EXTERNAL TABLE IF NOT EXISTS myun_src_external ( vehicleId bigint, recordId bigint, patientId bigint, calls bigint, locationLatitute double, locationLongtitue double, recordTime string, direction string ) STORED BY 'myun.MyStorageHandler' WITH SERDEPROPERTIES('delimiter'='|') LOCATION 'oss://oss-cn-hangzhou-zmf.aliyuncs.com/074799/demo/SampleData/CSV/src/' USING 'myun.jar'; -
Créez un script SQL MaxCompute, saisissez l'instruction d'interrogation suivante, puis cliquez sur l'icône
pour interroger les données.set odps.task.major.version=unstructured_data; select * from myun_src_external where patientId > 25;
Références
Exemple : Créer une table externe OSS à l'aide d'un extracteur personnalisé