MaxCompute 2.0支援通過外部表格的方式直接存取OSS、OTS等。MaxCompute Studio對此提供了一些代碼模板方便您快速進行非結構化資料查詢開發。本文為您介紹如何使用MaxCompute Studio查詢非結構化資料。
前提條件
您需要完成以下操作:
編寫StorageHandler、Extractor和Outputter
在Project地區,按右鍵Module的源碼目錄(即),選擇。
-
填寫Name並選擇類型為Extractor、StorageHandler或Outputer,按下Enter鍵。
-
Name:建立的MaxCompute Java Class名稱。如果還沒有建立Package,在此處填寫packagename.classname,會自動產生Package。
-
選擇類型為Extractor、StorageHandler或Outputer。
說明您可以根據需要選擇Extractor、StorageHandler或Outputer類型:
-
Extractor:自訂輸入資料解析器,用來實現自訂處理資料讀取的邏輯,即如何讀取非結構化資料。
-
StorageHandler:用於指定和配置自訂Extractor和Outputer的實作類別。
-
Outputer: 自訂輸出資料Outputer,用來實現自訂輸出資料的邏輯,即如何寫出非結構化資料。
-
-
-
建立Extractor成功後,在編輯介面開發Java程式。代碼框中模板已自動填滿架構代碼,只需要自行編寫需要的邏輯代碼即可。
通過單元測試調試Extractor和Outputter
您可以參照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);
}
}
打包上傳
調試成功之後,將Java程式打成JAR包,並作為資源上傳至MaxCompute服務端。詳情請參見打包、上傳和註冊。
查詢非結構化資料
-
在Project地區,按右鍵scripts,選擇。
-
在Script Name後輸入SQL指令碼名稱,MaxCompute Project中選擇執行指令碼的MaxCompute專案,單擊OK。
-
在編輯器中輸入建立外部表格的SQL語句,並單擊
表徵圖,完成外部表格建立。--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'; -
建立一個MaxCompute SQL指令碼,輸入如下查詢語句,並單擊
表徵圖,查詢資料。set odps.task.major.version=unstructured_data; select * from myun_src_external where patientId > 25;