全部產品
Search
文件中心

MaxCompute:使用SQL管理外部項目

更新時間:Jun 19, 2024

構建湖倉一體時,您需要建立外部項目(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=trueset.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;

相關文檔

如果您想給外部項目或其中的表進行授權,可參見對於外部項目的使用者以及許可權操作