すべてのプロダクト
Search
ドキュメントセンター

DataWorks:外部テーブル

最終更新日:Jun 22, 2026

このトピックでは、DataWorks で外部テーブルを作成および構成する方法について説明し、外部テーブルがサポートするデータ型を一覧表示します。

概要

外部テーブルを使用する前に、次の表で説明する概念を理解してください。

パラメーター

説明

Object Storage Service (OSS)

Object Storage Service (OSS) は、標準、低頻度アクセス、アーカイブのストレージクラスを提供し、さまざまなストレージシナリオに対応します。OSS は、オープンソースの Hadoop コミュニティや、E-MapReduce (EMR)、Batch Compute、MaxCompute、Machine Learning Platform for AI (PAI)、Function Compute などの他のプロダクトと統合されています。

MaxCompute

MaxCompute は、高速でフルマネージドなデータウェアハウジングソリューションです。MaxCompute を OSS と統合することで、大量のデータを効率的かつコスト効果の高い方法で分析および処理できます。

MaxCompute 外部テーブル

MaxCompute V2.0 計算エンジンを搭載した外部テーブルを使用すると、データを MaxCompute テーブルにロードすることなく、OSS 内の大量のファイルを直接クエリできます。これにより、データ移行の時間と労力が削減され、ストレージコストが節約されます。

外部テーブルの全体的な処理アーキテクチャを次の図に示します。架构图

MaxCompute は、OSS や Tablestore などの非構造化ストレージサービスのデータ用の外部テーブルの作成をサポートしています。非構造化処理フレームワークは、MaxCompute プラットフォームのデータインポートとエクスポートを処理します。OSS 外部テーブルを例に、処理ロジックを以下に示します。

  1. 非構造化フレームワークは、外部の OSS データを変換し、Java の InputStream クラスを介してカスタムコードに提供します。EXTRACT ロジックを実装して、InputStream からの入力を読み取り、解析、変換、計算し、MaxCompute が処理できる汎用の Record フォーマットでデータを返すことができます。

  2. これらのレコードは、MaxCompute の SQL ロジックを使用して処理できます。この計算は、MaxCompute の組み込みの構造化 SQL エンジンに基づいており、新しいレコードを生成する場合があります。

  3. システムは、処理されたレコードをカスタムの OUTPUT ロジックに渡して、さらに変換します。その後、システムが提供する OutputStream を使用して、レコードから必要な情報を OSS に書き込むことができます。

DataWorks を MaxCompute と一緒に使用して、外部テーブルの作成、検索、クエリ、構成、処理、分析など、さまざまな操作を視覚的に実行できます。

ネットワークとアクセス権限

MaxCompute と OSS は 2 つの独立したサービスであるため、それらのデプロイメントクラスター間のネットワーク接続が、MaxCompute の OSS データへのアクセス能力に影響を与える可能性があります。MaxCompute から OSS データにアクセスする場合は、-internal.aliyuncs.com で終わるホストアドレスである OSS 内部エンドポイントを使用します。

MaxCompute が OSS データにアクセスするには、安全な権限付与チャンネルが必要です。MaxCompute は、Alibaba Cloud の Resource Access Management (RAM) と Security Token Service (STS) を使用して、安全なデータアクセスを保証します。権限をリクエストする際、MaxCompute はテーブル作成者の ID で STS に権限を申請します。Tablestore の権限設定は OSS と同じです。

  1. STS 権限付与

    OSS データにアクセスするには、MaxCompute のアクセスアカウントに適切な権限を割り当てる必要があります。STS は、RAM が提供する安全なトークン管理サービスです。これにより、権限を与えられたクラウドサービスまたは RAM ユーザーが、カスタムの有効期間と権限を持つ一時的なアクセストークンを発行できます。これらのトークンを取得したアプリケーションは、Alibaba Cloud API を呼び出してリソースにアクセスできます。

    権限は、次の 2 つの方法のいずれかで付与できます。

    • MaxCompute プロジェクトと OSS バケットが同じ Alibaba Cloud アカウントに属している場合は、アカウントでログインした後にワンクリック認可を実行できます。

      1. 新しいテーブルのエディターページを開き、Physical Model セクションに移動します。

      2. Table Type で、External Table を選択します。

      3. Storage Address の横にある Authorize をクリックします。その後、もう一度 [認可] をクリックします。

      4. [クラウドリソースアクセス認可] ダイアログボックスで、同意権限 をクリックします。認可ページで、ODPS サービスが OSS および Tablestore リソースにアクセスするために使用する AliyunODPSDefaultRole ロールを選択します。その後、[認可の確認] をクリックします。

    • カスタム権限付与を使用して、RAM コンソールで MaxCompute に OSS へのアクセスを許可します。

      1. RAM コンソールにログインします。

        説明

        MaxCompute と OSS が異なるアカウントに属している場合は、OSS アカウントでログインして権限を付与します。

      2. 左側のナビゲーションウィンドウで、[アイデンティティ] > Roleを選択します。

      3. [ロールの作成] をクリックし、信頼できるエンティティとして Alibaba Cloud Account を選択し、Next をクリックします。

      4. ロール名Remarks を入力します。

        説明

        ロール名を AliyunODPSDefaultRole または AliyunODPSRoleForOtherUser に設定します。

      5. [信頼できる Alibaba Cloud アカウントの選択] で、Current Alibaba Cloud Account または Another Alibaba Cloud Account を選択します。

        説明

        Another Alibaba Cloud Account を選択した場合は、他のアカウントの ID を入力する必要があります。

      6. [OK] をクリックします。
      7. ロールの詳細を構成します。

        ロール管理ページで、RAM ロールの名前をクリックします。[信頼ポリシー] タブで、[信頼ポリシーの編集] をクリックし、シナリオに基づいて次のポリシーコンテンツを入力します。

        -- MaxCompute プロジェクトと OSS バケットが同じアカウントに属する場合。
        {
        "Statement": [
        {
        "Action": "sts:AssumeRole",
        "Effect": "Allow",
        "Principal": {
        "Service": [
        "odps.aliyuncs.com"
              ]
            }
          }
        ],
        "Version": "1"
        }                                           
        -- MaxCompute プロジェクトと OSS バケットが異なるアカウントに属する場合。
        {
        "Statement": [
        {
        "Action": "sts:AssumeRole",
        "Effect": "Allow",
        "Principal": {
        "Service": [
        "MaxCompute プロジェクトを所有する Alibaba Cloud アカウントの ID@odps.aliyuncs.com"
              ]
            }
          }
        ],
        "Version": "1"
        }

        構成が完了したら、[信頼ポリシーの保存] をクリックします。

      8. ロールの権限付与ポリシーを構成します。ロールが OSS にアクセスするために必要な AliyunODPSRolePolicy ポリシーを見つけてアタッチします。検索してもこのポリシーが見つからない場合は、カスタムポリシーを作成できます。

        {
            "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 データソースの使用

    OSS データソースを作成して保存している場合は、ワークスペースリスト ページでワークスペースを見つけ、Management 列の 操作 をクリックし、Data Source ページでデータソースを表示して使用します。

外部テーブルの作成

  1. DDL 文を使用したテーブルの作成

    Data Studio ページに移動します。DDL 文を使用してテーブルを作成する方法の詳細については、「MaxCompute テーブルの作成と使用」をご参照ください。標準の MaxCompute 構文に従うだけで済みます。STS サービスの権限付与に成功した場合、odps.properties.rolearn プロパティを設定する必要はありません。

    次のサンプル DDL 文は、テーブルの作成方法を示しています。EXTERNAL パラメーターは、テーブルが外部テーブルであることを指定します。

    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 句は、データのシリアル化とデシリアル化に使用されるパラメーターを指定します。これらのパラメーターは、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/'     -- 必須。LOCATION 句は、外部テーブルのストレージの場所を指定します。
    USING 'odps-udf-example.jar'; -- カスタムフォーマットを使用する場合、クラス定義を含む JAR パッケージを指定します。カスタムフォーマットを使用しない場合、この句は必須ではありません。

    STORED BY 句の後には、CSV または TSV ファイルのデフォルトの組み込み StorageHandler を指定するパラメーターが続きます。パラメーターは以下のとおりです。

    • CSV: com.aliyun.odps.CsvStorageHandler。このハンドラは、CSV 形式のデータの読み取りと書き込み方法を定義します。規則として、列区切り文字はカンマ (,)、改行は改行文字 (\n) です。例:STORED BY 'com.aliyun.odps.CsvStorageHandler'

    • TSV: com.aliyun.odps.TsvStorageHandler。このハンドラは、TSV 形式のデータの読み取りと書き込み方法を定義します。規則として、列区切り文字はタブ (\t)、改行は改行文字 (\n) です。

    STORED BY 句は、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

    次の DDL 文を使用して、オープンソースフォーマットの外部テーブルを作成します。

      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}/';

    次の表に、SerDe プロパティを示します。

    パラメーター

    デフォルト

    説明

    odps.text.option.gzip.input.enabled

    true/false

    false

    読み取り圧縮を有効または無効にします。

    odps.text.option.gzip.output.enabled

    true/false

    false

    書き込み圧縮を有効または無効にします。

    odps.text.option.header.lines.count

    非負の整数

    0

    テキストファイルのヘッダーの最初の N 行をスキップします。

    odps.text.option.null.indicator

    文字列

    空の文字列

    解析または書き込み時に NULL 値を表す文字列。

    odps.text.option.ignore.empty.lines

    true/false

    true

    空行を無視するかどうかを指定します。

    odps.text.option.encoding

    UTF-8/UTF-16/US-ASCII

    UTF-8

    テキストの文字コードを指定します。

説明

MaxCompute は、組み込みエクストラクターを使用して、OSS からの gzip 圧縮された CSV または TSV データのみの読み取りをサポートします。ファイルが gzip 圧縮されているかどうかを選択でき、それによって設定する必要があるプロパティが決まります。

LOCATION パラメーターのフォーマットは oss://oss-cn-shanghai-internal.aliyuncs.com/BucketName/DirectoryName です。GUI ダイアログボックスで OSS ディレクトリのアドレスを選択できます。ディレクトリの後にファイル名を追加する必要はありません。

DDL モードで作成されたテーブルは、テーブル管理のテーブルノードツリーに表示されます。第 1 レベルと第 2 レベルのテーマを変更することで、表示位置を変更できます。

  • Tablestore 外部テーブル

    次の文を使用して、Tablestore 外部テーブルを作成します。

    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'; 

    パラメーターは以下のとおりです。

    • com.aliyun.odps.TableStoreStorageHandler は、Tablestore データを処理するための MaxCompute の組み込み StorageHandler です。

    • SERDEPROPERTIES 句は、パラメーターオプションを指定します。TableStoreStorageHandler を使用する場合、tablestore.columns.mapping と tablestore.table.name の 2 つのオプションを指定する必要があります。

      • tablestore.columns.mapping: MaxCompute がアクセスする Tablestore テーブルの列を記述する必須のオプションです。これには、プライマリキーと属性が含まれます。コロン (:) プレフィックスは、Tablestore のプライマリキーを示します。たとえば、この文では、:o_orderkey:o_orderdate がプライマリキーで、その他は属性列です。

        Tablestore は、STRING、INTEGER、または BINARY 型の 1〜4 つのプライマリキーをサポートします。最初のプライマリキーはパーティションキーです。マッピングを指定する際には、指定された Tablestore テーブルのすべてのプライマリキーを提供する必要があります。属性列については、MaxCompute がアクセスする必要のある列のみを提供する必要があります。

      • tablestore.table.name: アクセスする Tablestore テーブルの名前。指定されたテーブル名が正しくないか、存在しない場合、MaxCompute はエラーを報告します。MaxCompute は Tablestore テーブルを自動的に作成しません。

    • LOCATION: Tablestore インスタンス名、エンドポイント、およびその他の詳細を指定します。

  • GUI でのテーブルの作成

    Data Studio ページに移動し、GUI でテーブルを作成します。詳細については、「MaxCompute テーブルの作成と使用」をご参照ください。外部テーブルには次のプロパティがあります。

    • General

      • 英語のテーブル名 (Create Table で入力)

      • 表示名

      • 第 1 レベルのテーマと第 2 レベルのテーマ

      • 説明

    • Physical Model

      • Table Type: External Table を選択します。

      • Partition Type: Tablestore 外部テーブルではパーティション分割はサポートされていません。

      • Storage Address: これは LOCATION パラメーターに対応します。Physical Model セクションで LOCATION パラメーターを設定できます。Select をクリックしてストレージの場所を選択します。選択後、Authorize をクリックします。

      • [ファイル形式]: ビジネス要件に基づいてフォーマットを選択します。サポートされているフォーマットには、CSV、TSV、ORC、PARQUET、SEQUENCEFILE、RCFILE、AVRO、TEXTFILE、およびカスタムファイル形式が含まれます。カスタムファイル形式を選択した場合は、カスタムリソースを選択する必要があります。リソースを送信すると、それに含まれるクラス名が自動的に解析され、選択可能になります。

      • rolearn: STS 権限付与が完了している場合、このパラメーターは空のままにできます。

    • Schema: [スキーマ] セクションで、次のフィールドを追加します:age (BIGINT, 年齢)、job (STRING, 職業)、marital (STRING, 婚姻状況)、education (STRING, 学歴)、default (STRING, クレジットカードの状況)。これらのフィールドはいずれもプライマリキーではありません。

      パラメーター

      説明

      Field Type

      MaxCompute 2.0 は、さまざまな基本データ型および複合データ型をサポートしています。

      操作

      フィールドの追加、変更、削除をサポートします。

      Definition or Maximum Value Length

      VARCHAR 型の場合、長さを設定できます。複合データ型の場合、型定義を直接入力できます。

  • サポートされるデータ型

    次の表に、外部テーブルがサポートする基本データ型を示します。

    新規

    説明

    TINYINT

    はい

    1Y, -127Y

    8 ビットの符号付き整数。値の範囲は -128 から 127 です。

    SMALLINT

    はい

    32767S, -100S

    16 ビットの符号付き整数。値の範囲は -32,768 から 32,767 です。

    INT

    はい

    1000, -15645787

    32 ビットの符号付き整数。値の範囲は -231 から 231-1 です。

    BIGINT

    いいえ

    100000000000L, -1L

    64 ビットの符号付き整数。値の範囲は -263 から 263-1 です。

    FLOAT

    はい

    N/A

    32 ビットのバイナリ浮動小数点数。

    DOUBLE

    いいえ

    3.1415926 1E+7

    8 バイト、倍精度、64 ビットのバイナリ浮動小数点数。

    DECIMAL

    いいえ

    3.5BD, 99999999999.9999999BD

    10 進数の厳密な数値型。整数部の範囲は -1036+1 から 1036-1 で、小数部は 10-18 桁まで正確です。

    VARCHAR(n)

    はい

    N/A

    可変長文字型。n は長さです。n の値の範囲は 1 から 65,535 です。

    STRING

    いいえ

    "abc", 'bcd', "alibaba"

    文字列型。最大長は 8 MB です。

    BINARY

    はい

    N/A

    バイナリデータ型。最大長は 8 MB です。

    DATETIME

    いいえ

    DATETIME '2017-11-11 00:00:00'

    UTC+8 をシステムの標準時として使用する日付時刻型。値の範囲は 0000-01-01 から 9999-12-31 で、ミリ秒単位で正確です。

    TIMESTAMP

    はい

    TIMESTAMP '2017-11-11 00:00:00.123456789'

    タイムゾーンに依存しないタイムスタンプ型。値の範囲は 0000-01-01 00:00:00.000000000 から 9999-12-31 23:59:59.999999999 で、ナノ秒単位で正確です。

    BOOLEAN

    いいえ

    TRUE と FALSE

    BOOLEAN 型。TRUE または FALSE を指定できます。

    次の表に、外部テーブルがサポートする複合データ型を示します。

    定義

    コンストラクタ

    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', '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 でサポートされる新しいデータ型 (TINYINT、SMALLINT、INT、FLOAT、VARCHAR、TIMESTAMP、BINARY、または複合データ型など) を使用する必要がある場合は、テーブル作成文の前に set odps.sql.type.system.odps2=true; という文を追加する必要があります。set 文とテーブル作成文を一緒に送信します。Hive 互換性のためには、set odps.sql.hive.compatible=true; という文を追加します。

    外部テーブルの表示と管理

    Data Studio ページに移動し、左側のナビゲーションウィンドウで Table Management をクリックして外部テーブルをクエリできます。詳細については、「テーブル管理」をご参照ください。外部テーブルの管理は、内部テーブルの管理と似ています。