使用SQL管理外部項(xiàng)目
構(gòu)建湖倉(cāng)一體時(shí),您需要?jiǎng)?chuàng)建外部項(xiàng)目(External Project)用于關(guān)聯(lián)Hadoop集群,或關(guān)聯(lián)DLF及OSS。本文為您介紹如何使用SQL方式對(duì)不同場(chǎng)景中已創(chuàng)建的外部項(xiàng)目、及其中的表進(jìn)行管理,例如查詢或更新表數(shù)據(jù)等操作。
背景信息
您在通過(guò)DataWorks控制臺(tái)的數(shù)據(jù)湖集成界面創(chuàng)建External Project后,可以使用SQL方式操作External Project,場(chǎng)景如下所示。
基于數(shù)據(jù)湖構(gòu)建DLF和對(duì)象存儲(chǔ)OSS的外部項(xiàng)目操作
在創(chuàng)建External Project后,您可以通過(guò)MaxCompute客戶端進(jìn)入創(chuàng)建的External Project空間,在關(guān)聯(lián)的MaxCompute項(xiàng)目下,對(duì)External Project的表或數(shù)據(jù)進(jìn)行操作。
與常規(guī)MaxCompute SQL不同的是,External Project表需要以external_project_name.table_name格式引用。目前暫不支持在外部項(xiàng)目中創(chuàng)建表。
向表中插入數(shù)據(jù)。
向非分區(qū)表插入數(shù)據(jù)。
--進(jìn)入關(guān)聯(lián)的MaxCompute項(xiàng)目(非外部項(xiàng)目)。 use doc_test_prod; --向非分區(qū)表中插入數(shù)據(jù)。 insert into table ext_mcdlf_ddl.ddl_test values(1,"ddl_test_1");
向分區(qū)表中插入數(shù)據(jù)。
--進(jìn)入關(guān)聯(lián)的MaxCompute項(xiàng)目。 use doc_test_prod; --向表中插入數(shù)據(jù)。 insert overwrite table ext_mcdlf_ddl.range_ptstring_ptint partition (pt1 = 'ds1', pt2=2) values (4, 'val4'), (5, 'val5');
查看External Project中的表信息。
--進(jìn)入關(guān)聯(lián)的MaxCompute項(xiàng)目。 use doc_test_prod; --查看External Project下的表。 show tables in doc_test_prod; --查看ext_mcdlf_ddl.ddl_test表結(jié)構(gòu)。 desc extended ext_mcdlf_ddl.ddl_test;
查詢External Project中的表數(shù)據(jù)。
--進(jìn)入關(guān)聯(lián)的MaxCompute項(xiàng)目。 use doc_test_prod; --查詢非分區(qū)表ext_mcdlf_ddl.ddl_test數(shù)據(jù)。 select * from ext_mcdlf_ddl.ddl_test limit 10; --查詢分區(qū)表ext_mcdlf_ddl.range_ptstring_ptint的數(shù)據(jù)。 select * from ext_mcdlf_ddl.range_ptstring_ptint where pt1='ds1';
對(duì)于某些特殊場(chǎng)景,需要在執(zhí)行 SQL 時(shí)添加參數(shù),例如:
-- 如果用戶的orc 版本大于 orc135。 則應(yīng)設(shè)置如下參數(shù): set odps.ext.oss.orc.native=true; -- 打開(kāi)Hive兼容模式后,MaxCompute才支持Hive指定的各種語(yǔ)法 set odps.sql.hive.compatible=true; -- 通過(guò)OSS分片上傳功能將數(shù)據(jù)寫(xiě)入OSS set odps.sql.unstructured.oss.commit.mode=true; -- 支持通過(guò)如下語(yǔ)句全project 默認(rèn)打開(kāi)該功能 setproject odps.sql.unstructured.oss.commit.mode=true;
常規(guī)MaxCompute SQL語(yǔ)法,請(qǐng)參見(jiàn)表操作和插入或覆寫(xiě)數(shù)據(jù)(INSERT INTO | INSERT OVERWRITE)。
您可以在odps_config.ini文件中增加set配置內(nèi)容,避免每次手動(dòng)輸入。
更多分片上傳功能信息,請(qǐng)參見(jiàn)分片上傳。
基于Hadoop外部數(shù)據(jù)源的外部項(xiàng)目操作
按照如下命令,查詢Hadoop中Hive表數(shù)據(jù)。
--執(zhí)行作業(yè)需要在普通項(xiàng)目下,不能是外部項(xiàng)目。
use <main_project_name>;
--訪問(wèn)阿里云E-MapReduce表必須設(shè)置,訪問(wèn)MaxCompute內(nèi)部表不需要。
set odps.sql.hive.compatible=true;
--指定寫(xiě)出到HDFS的用戶名(非必須)。
set odps.external.hadoop.user=<hadoop_name>;
--讀取Hive表數(shù)據(jù)。
select * from <my_hive_table> limit 10;
目前無(wú)法對(duì)關(guān)聯(lián)的External Project執(zhí)行DDL類的SQL語(yǔ)句(add partition和drop partition除外)。DDL SQL語(yǔ)句,詳情請(qǐng)參見(jiàn)SQL概述。
您可以在odps_config.ini文件中增加set配置set.odps.sql.hive.compatible=true和set.odps.external.hadoop.user=<hadoop_name>,避免每次手動(dòng)輸入。
創(chuàng)建與外部數(shù)據(jù)源中表結(jié)構(gòu)相同的表
如果需要?jiǎng)?chuàng)建與外部數(shù)據(jù)源中表結(jié)構(gòu)相同的表,可以使用create table...like
命令復(fù)制外部數(shù)據(jù)源中表的結(jié)構(gòu),命令示例如下。
create table...like
命令詳細(xì)說(shuō)明請(qǐng)參見(jiàn)表操作。
-- 創(chuàng)建表
create table from_exe_tbl like external_project.testtbl;
-- 此時(shí)from_exe_tbl的表結(jié)構(gòu)與 external_project.testtbl 完全相同。
-- 除生命周期屬性外,列名、列注釋以及表注釋等均相同。但external_project.testtbl中的數(shù)據(jù)不會(huì)被復(fù)制到from_exe_tbl表中。
-- 查詢表
SELECT * from from_exe_tbl;
-- 查看表結(jié)構(gòu)
desc from_exe_tbl;
相關(guān)文檔
如果您想給外部項(xiàng)目或其中的表進(jìn)行授權(quán),可參見(jiàn)對(duì)于外部項(xiàng)目的用戶以及權(quán)限操作。