Data Lake Analytic(後文簡稱 DLA)能夠幫助用戶經過標準的SQL語句直接對存儲在OSS、TableStore上的數據進行查詢分析。spa
在查詢前,用戶須要根據數據文件的格式和內容在DLA中建立一張表。Data Lake Analytics + OSS數據文件格式處理大全 一文中介紹瞭如何定義表的SERDE和ROW FORMAT。code
本文將以存儲在OSS上的文件爲例詳細介紹如何指定表LOCATION。orm
DLA中的建表語句的語法爲ci
CREATE EXTERNAL TABLE [IF NOT EXISTS] [db_name.]table_name [(col_name data_type [COMMENT col_comment], ... [constraint_specification])] [COMMENT table_comment] [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)] [ROW FORMAT row_format] [STORE AS file_format] | STORED BY 'storage.handler.class.name' [WITH SERDEPROPERTIES (...)] LOCATION oss_path
其中 LOCATION能夠是數據文件自己,也能夠是數據文件所在的目錄。get
建表時能夠將表直接關聯到數據文件,此時的LOCATION須要是該文件在OSS上的絕對路徑。
例如:io
CREATE EXTERNAL TABLE loc_file_csv( N_NATIONKEY INT, N_NAME STRING, N_REGIONKEY INT, N_COMMENT STRING ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' STORED AS TEXTFILE LOCATION 'oss://my-bucket/datasets/test/test_create/create_table/csv/dir1/dir2/nation.csv';
LOCATION也能夠指向OSS上的目錄,該目錄下的文件便是表的數據文件。
建表時,能夠經過設置屬性 recursive.directories 來控制是遍歷該目錄下的全部數據文件。默認或不顯式指定recursive.directories,DLA會解析爲false,即不遍歷。社區
例如,OSS上的目錄結構爲table
2018-07-05 11:16:11 1752.00B Standard oss://my-bucket/datasets/test/test_create/create_table/csv/dir1/dir2/nation.csv 2018-07-05 11:15:57 1752.00B Standard oss://my-bucket/datasets/test/test_create/create_table/csv/dir1/nation.csv 2018-07-05 11:16:17 1752.00B Standard oss://my-bucket/datasets/test/test_create/create_table/csv/nation.csv
建表語句爲:form
CREATE EXTERNAL TABLE loc_file_csv( N_NATIONKEY INT, N_NAME STRING, N_REGIONKEY INT, N_COMMENT STRING ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' STORED AS TEXTFILE LOCATION 'oss://my-bucket/datasets/test/test_create/create_table/csv/' TBLPROPERTIES ('recursive.directories' = 'false');
當recursive.directories=false,該表的數據文件爲只有LOCATION下的nation.csv一個文件,即class
oss://my-bucket/datasets/test/test_create/create_table/csv/nation.csv
建表語句爲:
CREATE EXTERNAL TABLE loc_file_csv( N_NATIONKEY INT, N_NAME STRING, N_REGIONKEY INT, N_COMMENT STRING ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' STORED AS TEXTFILE LOCATION 'oss://my-bucket/datasets/test/test_create/create_table/csv/' TBLPROPERTIES ('recursive.directories' = 'true');
當recursive.directories=true,該表的數據文件爲LOCATION目錄下及其子目錄下的全部csv文件,即
oss://my-bucket/datasets/test/test_create/create_table/csv/nation.csv oss://my-bucket/datasets/test/test_create/create_table/csv/dir1/nation.csv oss://my-bucket/datasets/test/test_create/create_table/csv/dir1/dir2/nation.csv
例如,建表時指定STORED AS TEXTFILE,可是目錄下除了csv文件,還有orc格式的文件。這種狀況下,在建表和查詢時並不會報錯,可是SELECT時可能會看到數據亂碼或不許確。
爲了給你們帶來更好的查詢分析體驗, 目前DLA還在不斷完善中,歡迎你們試用,提出您的寶貴意見或建議。
本文做者:金絡
本文爲雲棲社區原創內容,未經容許不得轉載。