日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

外部表

本文將為您介紹如何通過DataWorks創(chuàng)建、配置外部表,以及外部表支持的字段類型。

外部表概述

使用外部表前,您需要了解下表中的定義。

名稱

描述

對象存儲OSS

提供標(biāo)準(zhǔn)、低頻、歸檔存儲類型,能夠覆蓋不同的存儲場景。同時,OSS能夠與Hadoop開源社區(qū)及EMR、批量計算、MaxCompute、機(jī)器學(xué)習(xí)和函數(shù)計算等產(chǎn)品進(jìn)行深度結(jié)合。

MaxCompute

大數(shù)據(jù)計算服務(wù)MaxCompute為您提供快速且完全托管的數(shù)據(jù)倉庫解決方案,并可以通過與OSS的結(jié)合,高效經(jīng)濟(jì)地分析處理海量數(shù)據(jù)。

MaxCompute外部表

該功能基于MaxCompute新一代的V2.0計算框架,可以幫助您直接對OSS中的海量文件進(jìn)行查詢,無需將數(shù)據(jù)加載至MaxCompute表中。既減少了數(shù)據(jù)遷移的時間和人力,也節(jié)省了存儲的成本。

下圖為外部表的整體處理架構(gòu)。架構(gòu)圖

目前,MaxCompute主要支持OSS和OTS等非結(jié)構(gòu)化存儲的外部表。從數(shù)據(jù)的流動和處理邏輯的角度,非結(jié)構(gòu)化處理框架在MaxCompute計算平臺兩端有耦合地進(jìn)行數(shù)據(jù)導(dǎo)入和導(dǎo)出。以O(shè)SS外部表為例,處理邏輯如下:

  1. 外部的OSS數(shù)據(jù)經(jīng)過非結(jié)構(gòu)化框架轉(zhuǎn)換,使用JAVA InputStream類提供給您自定義代碼接口。您可以自己實現(xiàn)Extract邏輯,只需要負(fù)責(zé)對輸入的InputStream進(jìn)行讀取、解析、轉(zhuǎn)化和計算,最終返回MaxCompute計算平臺通用的Record格式。

  2. 上述Record可以自由參與MaxCompute的SQL邏輯運(yùn)算,該部分計算基于MaxCompute內(nèi)置的結(jié)構(gòu)化SQL運(yùn)算引擎,并可能產(chǎn)生新的Record。

  3. 經(jīng)過運(yùn)算的Record傳遞給用戶自定義的Output邏輯,您可以進(jìn)行進(jìn)一步的計算轉(zhuǎn)換,并最終通過系統(tǒng)提供的OutputStream,輸出Record中需要輸出的信息,由系統(tǒng)負(fù)責(zé)寫入至OSS。

您可以通過DataWorks配合MaxCompute,對外部表進(jìn)行可視化的創(chuàng)建、搜索、查詢、配置、加工和分析等操作。

網(wǎng)絡(luò)與權(quán)限認(rèn)證

由于MaxCompute與OSS是兩個獨(dú)立的云計算與云存儲服務(wù),所以在不同的部署集群上的網(wǎng)絡(luò)連通性有可能影響MaxCompute訪問OSS的數(shù)據(jù)的可達(dá)性。在MaxCompute中訪問OSS存儲時,建議您使用OSS私網(wǎng)地址(即以-internal.aliyuncs.com結(jié)尾的host地址)。

MaxCompute需要有一個安全的授權(quán)通道訪問OSS數(shù)據(jù)。MaxCompute結(jié)合了阿里云的訪問控制服務(wù)(RAM)和令牌服務(wù)(STS)實現(xiàn)對數(shù)據(jù)的安全訪問。MaxCompute在獲取權(quán)限時,以表的創(chuàng)建者的身份在STS申請權(quán)限(OTS的權(quán)限設(shè)置與OSS一致)。

  1. STS模式授權(quán)

    MaxCompute需要直接訪問OSS的數(shù)據(jù),因此需要將OSS數(shù)據(jù)相關(guān)權(quán)限賦給MaxCompute的訪問賬號。STS是阿里云為客戶提供的一種安全令牌管理服務(wù),它是資源訪問管理(RAM)產(chǎn)品中的一員。通過STS服務(wù),獲得許可的云服務(wù)或RAM用戶,可以自主頒發(fā)自定義時效和子權(quán)限的訪問令牌。獲得訪問令牌的應(yīng)用程序,可以使用令牌直接調(diào)用阿里云服務(wù)API操作資源。

    詳情請參見OSS的STS模式授權(quán)。

    您可以通過以下兩種方式進(jìn)行授權(quán):

    • 當(dāng)MaxCompute和OSS的項目所有者是同一個賬號時,請直接登錄阿里云賬號后進(jìn)行一鍵授權(quán)。

      1. 打開新建表的編輯頁面,找到物理模型設(shè)計模塊。

      2. 勾選表類型后的外部表。

      3. 單擊選擇存儲地址后的一鍵授權(quán)一鍵授權(quán)

      4. 單擊云資源訪問授權(quán)對話框中的同意授權(quán)。1

    • 自定義授權(quán),在RAM中授予MaxCompute訪問OSS的權(quán)限。

      1. 登錄RAM控制臺

        說明

        如果MaxCompute和OSS不是同一個賬號,此處需要由OSS賬號登錄并授權(quán)。

      2. 單擊左側(cè)導(dǎo)航欄中的身份管理 > 角色。

      3. 單擊創(chuàng)建角色,選擇可信實體類型為阿里云賬號,單擊下一步

      4. 輸入角色名稱備注。

        說明

        設(shè)置角色名稱為AliyunODPSDefaultRoleAliyunODPSRoleForOtherUser。

      5. 選擇信任的云賬號當(dāng)前云賬號其他云賬號。

        說明

        如果選擇其他云賬號,請輸入其他云賬號的ID。

      6. 單擊完成。
      7. 配置角色詳情。

        在RAM角色管理頁面,單擊相應(yīng)的RAM角色名稱。在信任策略管理頁簽下,單擊編輯信任策略,根據(jù)自身情況輸入下述策略內(nèi)容。

        --當(dāng)MaxCompute和OSS的Owner是同一個賬號。
        {
        "Statement": [
        {
        "Action": "sts:AssumeRole",
        "Effect": "Allow",
        "Principal": {
        "Service": [
        "odps.aliyuncs.com"
              ]
            }
          }
        ],
        "Version": "1"
        }                                           
        --當(dāng)MaxCompute和OSS的Owner不是同一個賬號。
        {
        "Statement": [
        {
        "Action": "sts:AssumeRole",
        "Effect": "Allow",
        "Principal": {
        "Service": [
        "MaxCompute的Owner云賬號id@odps.aliyuncs.com"
              ]
            }
          }
        ],
        "Version": "1"
        }

        配置完成后,單擊保存信任策略。

      8. 配置角色授權(quán)策略,并找到授予角色訪問OSS必要的權(quán)限AliyunODPSRolePolicy,將權(quán)限AliyunODPSRolePolicy授權(quán)給該角色。如果您無法通過搜索授權(quán)找到,可以通過精確授權(quán)直接添加。

        {
            "Version": "1",
            "Statement": [
                {
                    "Action": [
                        "oss:ListBuckets",
                        "oss:GetObject",
                        "oss:ListObjects",
                        "oss:PutObject",
                        "oss:DeleteObject",
                        "oss:AbortMultipartUpload",
                        "oss:ListParts"
                    ],
                    "Resource": "*",
                    "Effect": "Allow"
                },
                {
                    "Action": [
                        "ots:ListTable",
                        "ots:DescribeTable",
                        "ots:GetRow",
                        "ots:PutRow",
                        "ots:UpdateRow",
                        "ots:DeleteRow",
                        "ots:GetRange",
                        "ots:BatchGetRow",
                        "ots:BatchWriteRow",
                        "ots:ComputeSplitPointsBySize"
                    ],
                    "Resource": "*",
                    "Effect": "Allow"
                },
                {
                    "Action": [
                        "pvtz:DescribeRegions",
                        "pvtz:DescribeZones",
                        "pvtz:DescribeZoneInfo",
                        "pvtz:DescribeVpcs",
                        "pvtz:DescribeZoneRecords"
                    ],
                    "Resource": "*",
                    "Effect": "Allow"
                },
                {
                    "Action": [
                        "dlf:CreateFunction",
                        "dlf:BatchGetPartitions",
                        "dlf:ListDatabases",
                        "dlf:CreateLock",
                        "dlf:UpdateFunction",
                        "dlf:BatchUpdateTables",
                        "dlf:DeleteTableVersion",
                        "dlf:UpdatePartitionColumnStatistics",
                        "dlf:ListPartitions",
                        "dlf:DeletePartitionColumnStatistics",
                        "dlf:BatchUpdatePartitions",
                        "dlf:GetPartition",
                        "dlf:BatchDeleteTableVersions",
                        "dlf:ListFunctions",
                        "dlf:DeleteTable",
                        "dlf:GetTableVersion",
                        "dlf:AbortLock",
                        "dlf:GetTable",
                        "dlf:BatchDeleteTables",
                        "dlf:RenameTable",
                        "dlf:RefreshLock",
                        "dlf:DeletePartition",
                        "dlf:UnLock",
                        "dlf:GetLock",
                        "dlf:GetDatabase",
                        "dlf:GetFunction",
                        "dlf:BatchCreatePartitions",
                        "dlf:ListPartitionNames",
                        "dlf:RenamePartition",
                        "dlf:CreateTable",
                        "dlf:BatchCreateTables",
                        "dlf:UpdateTableColumnStatistics",
                        "dlf:ListTableNames",
                        "dlf:UpdateDatabase",
                        "dlf:GetTableColumnStatistics",
                        "dlf:ListFunctionNames",
                        "dlf:ListPartitionsByFilter",
                        "dlf:GetPartitionColumnStatistics",
                        "dlf:CreatePartition",
                        "dlf:CreateDatabase",
                        "dlf:DeleteTableColumnStatistics",
                        "dlf:ListTableVersions",
                        "dlf:BatchDeletePartitions",
                        "dlf:ListCatalogs",
                        "dlf:UpdateTable",
                        "dlf:ListTables",
                        "dlf:DeleteDatabase",
                        "dlf:BatchGetTables",
                        "dlf:DeleteFunction"
                    ],
                    "Resource": "*",
                    "Effect": "Allow"
                }
            ]
        }
  2. 使用OSS數(shù)據(jù)源

    如果您已創(chuàng)建并保存了OSS數(shù)據(jù)源,請在工作空間列表頁面找到您所創(chuàng)建的工作空間,單擊操作列的管理,在數(shù)據(jù)源頁面進(jìn)行查看和使用。

創(chuàng)建外部表

  1. DDL模式建表

    進(jìn)入數(shù)據(jù)開發(fā)頁面,參見創(chuàng)建并使用MaxCompute表進(jìn)行DDL模式建表,您只需要遵守正常的MaxCompute語法即可。如果您的STS服務(wù)已成功授權(quán),則無需設(shè)置odps.properties.rolearn屬性。

    DDL建表語句示例如下,其中EXTERNAL參數(shù)說明該表為外部表。

    CREATE EXTERNAL TABLE IF NOT EXISTS ambulance_data_csv_external(
    vehicleId int,
    recordId int,
    patientId int,
    calls int,
    locationLatitute double,
    locationLongtitue double,
    recordTime string,
    direction string
    )
    
    STORED BY 'com.aliyun.odps.udf.example.text.TextStorageHandler' --STORED BY用于指定自定義格式StorageHandler的類名或其它外部表文件格式,必選。
    with SERDEPROPERTIES (
    'delimiter'='\\|', --SERDEPROPERTIES序列化屬性參數(shù),可以通過DataAttributes傳遞到Extractor代碼中,可選。
    'odps.properties.rolearn'='acs:ram::xxxxxxxxxxxxx:role/aliyunodpsdefaultrole'
    )
    LOCATION 'oss://oss-cn-shanghai-internal.aliyuncs.com/oss-odps-test/Demo/SampleData/CustomTxt/AmbulanceData/'     --外部表存放地址,必選。
    USING 'odps-udf-example.jar'; --指定自定義格式時類定義所在的Jar包,如果未使用自定義格式無需指定。 

    關(guān)于STORED BY后接參數(shù),其中CSV或TSV文件對應(yīng)默認(rèn)內(nèi)置的StorageHandler,具體參數(shù)如下:

    • CSV為com.aliyun.odps.CsvStorageHandler ,定義如何讀寫CSV格式數(shù)據(jù),數(shù)據(jù)格式約定列分隔符為英文逗號(,)、換行符為(\n)。實際參數(shù)輸入示例:STORED BY'com.aliyun.odps.CsvStorageHandler'

    • TSV為 com.aliyun.odps.TsvStorageHandler,定義如何讀寫TSV格式數(shù)據(jù),數(shù)據(jù)格式約定列分隔符為(\t)、換行符為(\n)。

    STORED BY后接參數(shù)還支持ORC、PARQUET、SEQUENCEFILE、RCFILE、AVRO和TEXTFILE 開源格式外部表,如下所示。對于textFile可以指定序列化類,例如org.apache.hive.hcatalog.data.JsonSerDe

    • org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe -> stored as textfile

    • org.apache.hadoop.hive.ql.io.orc.OrcSerde -> stored as orc

    • org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe -> stored as parquet

    • org.apache.hadoop.hive.serde2.avro.AvroSerDe -> stored as avro

    • org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe -> stored as sequencefile

    對于開源格式外部表,建表語句如下。

      CREATE EXTERNAL TABLE [IF NOT EXISTS] (<column schemas>)
      [PARTITIONED BY (partition column schemas)]
      [ROW FORMAT SERDE '']
      STORED AS 
      [WITH SERDEPROPERTIES ( 'odps.properties.rolearn'='${roleran}'
      [,'name2'='value2',...]
      ) ]
      LOCATION 'oss://${endpoint}/${bucket}/${userfilePath}/';

    SERDEPROPERTIES序列化屬性列表如下所示。

    屬性名

    屬性值

    默認(rèn)值

    描述

    odps.text.option.gzip.input.enabled

    true/false

    false

    打開或關(guān)閉讀壓縮

    odps.text.option.gzip.output.enabled

    true/false

    false

    打開或關(guān)閉寫壓縮

    odps.text.option.header.lines.count

    非負(fù)整數(shù)

    0

    跳過文本文件頭N行

    odps.text.option.null.indicator

    字符串

    空字符串

    在解析或者寫出NULL值時,代表NULL的字符串

    odps.text.option.ignore.empty.lines

    true/false

    true

    是否忽略空行

    odps.text.option.encoding

    UTF-8/UTF-16/US-ASCII

    UTF-8

    指定文本的字符編碼

    說明

    MaxCompute目前僅支持通過內(nèi)置extractor讀取OSS上gzip壓縮的CSV或TSV數(shù)據(jù),您可以選擇文件是否是gzip壓縮,不同的文件格式對應(yīng)不同的屬性設(shè)置。

    LOCATION參數(shù),格式為:oss://oss-cn-shanghai-internal.aliyuncs.com/Bucket名稱/目錄名稱。您可以通過圖形對話框選擇獲得OSS目錄地址,目錄后無需加文件名稱。

    DDL模式創(chuàng)建的表會出現(xiàn)在表管理的表節(jié)點(diǎn)樹下,可以通過修改其一級、二級主題來調(diào)整顯示位置。

  2. OTS外部表

    OTS外部表建表語句如下。

    CREATE EXTERNAL TABLE IF NOT EXISTS ots_table_external(
    odps_orderkey bigint,
    odps_orderdate string,
    odps_custkey bigint,
    odps_orderstatus string,
    odps_totalprice double
    )
    STORED BY 'com.aliyun.odps.TableStoreStorageHandler' 
    WITH SERDEPROPERTIES (
    'tablestore.columns.mapping'=':o_orderkey,:o_orderdate,o_custkey, o_orderstatus,o_totalprice', -- (3)
    'tablestore.table.name'='ots_tpch_orders'
    'odps.properties.rolearn'='acs:ram::xxxxx:role/aliyunodpsdefaultrole'
    )
    LOCATION 'tablestore://odps-ots-dev.cn-shanghai.ots-internal.aliyuncs.com'; 

    參數(shù)說明如下:

    • com.aliyun.odps.TableStoreStorageHandler是MaxCompute內(nèi)置的處理TableStore數(shù)據(jù)的StorageHandler。

    • SERDEPROPERTIES是提供參數(shù)選項的接口,在使用TableStoreStorageHandler時,有兩個必須指定的選項:tablestore.columns.mapping和 tablestore.table.name。

      • tablestore.columns.mapping:必選項,用來描述MaxCompute將訪問的Table Store表的列,包括主鍵和屬性以(:)打頭的用來表示Table Store主鍵,例如此語句中的:o_orderkey:o_orderdate,其它均為屬性列。

        Table Store支持1~4個主鍵,主鍵類型為STRING、INTEGER和BINARY,其中第一個主鍵為分區(qū)鍵。指定映射時,您必須提供指定Table Store表的所有主鍵,對于屬性列則沒有必要全部提供,可以只提供需要通過MaxCompute來訪問的屬性列。

      • tablestore.table.name:需要訪問的Table Store表名。如果指定的Table Store表名錯誤(不存在),則會報錯, MaxCompute不會主動去創(chuàng)建Table Store表。

    • LOCATION:用來指定Table Storeinstance名字、endpoint等具體信息。

  3. 圖形化建表

    進(jìn)入數(shù)據(jù)開發(fā)頁面,參見創(chuàng)建并使用MaxCompute表進(jìn)行圖形化建表。外部表具有如下屬性:

    • 基本屬性

      • 英文表名(在新建表時輸入)

      • 中文表名

      • 一級、二級主題

      • 描述

    • 物理模型設(shè)計

      • 表類型:請選擇為外部表

      • 分區(qū)類型:OTS類型外部表不支持分區(qū)。

      • 選擇存儲地址:即LOCATION參數(shù)。您可以在物理模型設(shè)計欄中設(shè)置LOCATION參數(shù)。單擊點(diǎn)擊選擇,即可選擇存儲地址。選擇完成后,單擊一鍵授權(quán)。

      • 選擇存儲格式:根據(jù)業(yè)務(wù)需求進(jìn)行選擇,支持CSV、TSV、ORC、PARQUET、SEQUENCEFILE、RCFILE、AVRO、TEXTFILE和自定義文件格式。如果您選擇了自定義文件格式,需要選擇自定義的資源。在提交資源時,可以自動解析出其包含的類名并可以供用戶選取。

      • rolearn:如果STS已授權(quán),可以不填寫。

    • 表結(jié)構(gòu)設(shè)計表結(jié)構(gòu)設(shè)計

      參數(shù)

      描述

      字段類型

      MaxCompute 2.0支持TINYINT、SMALLINT、INT、BIGINT、VARCHAR和STRING類型。

      操作

      支持新增、修改和刪除。

      長度/設(shè)置

      對于VARCHAR類型,可以支持設(shè)置長度。對于復(fù)雜類型可以直接填寫復(fù)雜類型的定義。

支持的字段類型

外部表支持的簡單字段類型如下表所示。

類型

是否新增

格式舉例

描述

TINYINT

1Y,-127Y

8位有符號整型,范圍為-128~127。

SMALLINT

32767S, -100S

16位有符號整型,范圍為-32,768~32,767。

INT

1000,-15645787

32位有符號整型,范圍為-2^31~2^31-1。

BIGINT

100000000000L, -1L

64位有符號整型,范圍為-2^63+1~2^63-1。

FLOAT

32位二進(jìn)制浮點(diǎn)型。

DOUBLE

3.1415926 1E+7

8字節(jié)雙精度浮點(diǎn)數(shù),64位二進(jìn)制浮點(diǎn)型。

DECIMAL

3.5BD,99999999999.9999999BD

10進(jìn)制精確數(shù)字類型,整型部分范圍為-1,036+1~1,036-1,小數(shù)部分精確到10~18。

VARCHAR(n)

變長字符類型,n為長度,取值范圍為1~65,535。

STRING

“abc”,’bcd’,”alibaba”

字符串類型,目前長度限制為8MB。

BINARY

二進(jìn)制數(shù)據(jù)類型,目前長度限制為8MB。

DATETIME

DATETIME ‘2017-11-11 00:00:00’

日期時間類型,使用東八區(qū)時間作為系統(tǒng)標(biāo)準(zhǔn)時間。范圍0000年1月1日~9999年12月31日,精確到毫秒。

TIMESTAMP

TIMESTAMP ‘2017-11-11 00:00:00.123456789’

與時區(qū)無關(guān)的時間戳類型,范圍為0000年1月1日~9999年12月31日23.59:59.999,999,999,精確到納秒。

BOOLEAN

包括TRUE和FALSE

BOOLEAN類型,取值TRUE或FALSE。

外部表支持的復(fù)雜字段類型如下表所示。

類型

定義方法

構(gòu)造方法

ARRAY

array< int >; array< struct< a:int, b:string >>

array(1, 2, 3); array(array(1, 2); array(3, 4))

MAP

map< string, string >; map< smallint, array< string>>

map(“k1”, “v1”, “k2”, “v2”); map(1S, array(‘a(chǎn)’, ‘b’), 2S, array(‘x’, ‘y))

STRUCT

struct< x:int, y:int>; struct< field1:bigint, field2:array< int>, field3:map< int, int>>

named_struct(‘x’, 1, ‘y’, 2); named_struct(‘field1’, 100L, ‘field2’, array(1, 2), ‘field3’, map(1, 100, 2, 200))

如果需要使用MaxCompute 2.0支持的新數(shù)據(jù)類型(TINYINT、SMALLINT、 INT、 FLOAT、VARCHAR、TIMESTAMP 、BINARY或復(fù)雜類型),需要在建表語句前加上語句set odps.sql.type.system.odps2=true;,set語句和建表語句一起提交執(zhí)行。如果需要兼容HIVE,建議加上語句odps.sql.hive.compatible=true;。

查看和處理外部表

您可以在數(shù)據(jù)開發(fā)頁面,單擊左側(cè)導(dǎo)航欄中的表管理,查詢外部表,詳情請參見表管理。處理外部表的方式與內(nèi)部表基本一致。