MaxCompute V2.0 では、外部テーブルを使用して Object Storage Service (OSS) や Tablestore などのストレージサービスにアクセスできます。MaxCompute Studio には、非構造化データのクエリに役立つコードテンプレートが用意されています。このトピックでは、MaxCompute Studio を使用して非構造化データをクエリする方法について説明します。
前提条件
以下の前提条件を満たしている必要があります。
MaxCompute プロジェクトが接続されていること。詳細については、「プロジェクト接続の管理」をご参照ください。
MaxCompute Java モジュールが作成されていること。詳細については、「MaxCompute Java モジュールの作成」をご参照ください。
StorageHandler、Extractor、または Outputer プログラムの作成
[Project] ペインで、モジュールのソースコードディレクトリ (つまり、) を右クリックし、 を選択します。
-
[名前] を入力し、タイプとして Extractor、StorageHandler、または Outputer を選択して、Enter キーを押します。
-
[名前]:MaxCompute Java クラスの名前。Package が作成されていない場合は、packagename.classname と入力して Package を自動的に作成します。
-
タイプとして Extractor、StorageHandler、または Outputer を選択します。
説明ビジネス要件に応じて、Extractor、StorageHandler、または Outputer を選択できます。
Extractor:非構造化データを読み取るロジックをカスタム構成できるクラス。
StorageHandler:Extractor または Outputer プログラムで定義されたロジックを実装するために使用されるクラス。
Outputer:非構造化データを書き込むロジックをカスタム構成できるクラス。
-
クラスが作成されたら、コードエディタで Java プログラムを開発します。Java テンプレートにはフレームワークコードが自動的に入力されます。要件に基づいてロジックコードをコンパイルするだけで済みます。
Extractor または Outputer プログラムのデバッグ
examples ディレクトリにあるサンプル単体テストを参照して、テストケースを作成できます。
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);
}
}
プログラムのパッケージ化とアップロード
プログラムをデバッグした後、プログラムを JAR パッケージに圧縮し、リソースとして MaxCompute サーバーにアップロードします。詳細については、「Java プログラムのパッケージ化、アップロード、および MaxCompute UDF の作成」をご参照ください。
非構造化データのクエリ
-
[プロジェクト] ツールウィンドウで、[スクリプト]を右クリックし、を選択します。
-
[スクリプト名] フィールドにスクリプト名を入力します。[MaxCompute プロジェクト] ドロップダウンリストから、ターゲットプロジェクトを選択します。次に、[OK] をクリックします。
-
コードエディタで、外部テーブルを作成するための SQL ステートメントを入力し、
アイコンをクリックします。--名前:osd --作成者:liuyi --作成時間: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'; -
MaxCompute SQL スクリプトを作成し、次のクエリ文を入力してから、
アイコンをクリックしてデータをクエリします。set odps.task.major.version=unstructured_data; select * from myun_src_external where patientId > 25;