構建湖倉一體時,您需要建立外部項目(External Project)用於關聯Hadoop叢集,或關聯DLF及OSS。本文為您介紹如何使用SQL方式對不同情境中已建立的外部項目、及其中的表進行管理,例如查詢或更新表資料等操作。
背景資訊
您在通過DataWorks控制台的資料湖整合介面建立External Project後,可以使用SQL方式操作External Project,情境如下所示。
基於資料湖構建DLF和Object Storage Service的外部項目操作
在建立External Project後,您可以通過MaxCompute用戶端進入建立的External Project空間,在關聯的MaxCompute專案下,對External Project的表或資料進行操作。
與常規MaxCompute SQL不同的是,External Project表需要以external_project_name.table_name格式引用。目前暫不支援在外部項目中建立表。
向表中插入資料。
向非分區表插入資料。
--進入關聯的MaxCompute專案(非外部項目)。 use doc_test_prod; --向非分區表中插入資料。 insert into table ext_mcdlf_ddl.ddl_test values(1,"ddl_test_1");
向分區表中插入資料。
--進入關聯的MaxCompute專案。 use doc_test_prod; --向表中插入資料。 insert overwrite table ext_mcdlf_ddl.range_ptstring_ptint partition (pt1 = 'ds1', pt2=2) values (4, 'val4'), (5, 'val5');
查看External Project中的表資訊。
--進入關聯的MaxCompute專案。 use doc_test_prod; --查看External Project下的表。 show tables in doc_test_prod; --查看ext_mcdlf_ddl.ddl_test表結構。 desc extended ext_mcdlf_ddl.ddl_test;
查詢External Project中的表資料。
--進入關聯的MaxCompute專案。 use doc_test_prod; --查詢非分區表ext_mcdlf_ddl.ddl_test資料。 select * from ext_mcdlf_ddl.ddl_test limit 10; --查詢分區表ext_mcdlf_ddl.range_ptstring_ptint的資料。 select * from ext_mcdlf_ddl.range_ptstring_ptint where pt1='ds1';
對於某些特殊情境,需要在執行 SQL 時添加參數,例如:
-- 如果使用者的orc 版本大於 orc135。 則應設定如下參數: set odps.ext.oss.orc.native=true; -- 開啟Hive相容模式後,MaxCompute才支援Hive指定的各種文法 set odps.sql.hive.compatible=true; -- 通過OSS分區上傳功能將資料寫入OSS set odps.sql.unstructured.oss.commit.mode=true; -- 支援通過如下語句全project 預設開啟該功能 setproject odps.sql.unstructured.oss.commit.mode=true;
常規MaxCompute SQL文法,請參見表操作和插入或覆寫資料(INSERT INTO | INSERT OVERWRITE)。
您可以在odps_config.ini檔案中增加set配置內容,避免每次手動輸入。
更多分區上傳功能資訊,請參見分區上傳。
基於Hadoop外部資料源的外部項目操作
按照如下命令,查詢Hadoop中Hive表資料。
--執行作業需要在普通專案下,不能是外部項目。
use <main_project_name>;
--訪問阿里雲E-MapReduce表必須設定,訪問MaxCompute內部表不需要。
set odps.sql.hive.compatible=true;
--指定寫出到HDFS的使用者名稱(非必須)。
set odps.external.hadoop.user=<hadoop_name>;
--讀取Hive表資料。
select * from <my_hive_table> limit 10;
目前無法對關聯的External Project執行DDL類的SQL語句(add partition和drop partition除外)。DDL SQL語句,詳情請參見SQL概述。
您可以在odps_config.ini檔案中增加set配置set.odps.sql.hive.compatible=true和set.odps.external.hadoop.user=<hadoop_name>,避免每次手動輸入。
建立與外部資料源中表結構相同的表
如果需要建立與外部資料源中表結構相同的表,可以使用create table...like
命令複製外部資料源中表的結構,命令樣本如下。
create table...like
命令詳細說明請參見表操作。
-- 建立表
create table from_exe_tbl like external_project.testtbl;
-- 此時from_exe_tbl的表結構與 external_project.testtbl 完全相同。
-- 除生命週期屬性外,列名、列注釋以及表注釋等均相同。但external_project.testtbl中的資料不會被複製到from_exe_tbl表中。
-- 查詢表
SELECT * from from_exe_tbl;
-- 查看錶結構
desc from_exe_tbl;
相關文檔
如果您想給外部項目或其中的表進行授權,可參見對於外部項目的使用者以及許可權操作。