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

DataWorks:外部テーブル

最終更新日:Jan 11, 2025

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

概要

次の表では、外部テーブルを使用する前に知っておく必要のある概念について説明します。

概念

説明

オブジェクトストレージサービス (OSS)

OSS は、Standard、Infrequent Access、Archive などのストレージクラスをサポートしており、さまざまなデータストレージシナリオに適用できます。さらに、OSS は、Hadoop オープンソースコミュニティや、E-MapReduce (EMR)、Batch Compute、MaxCompute、Machine Learning Platform for AI (PAI)、Function Compute などの他の製品と深く統合できます。

MaxCompute

MaxCompute は、効率的で完全に管理されたデータウェアハウジングソリューションです。OSS と組み合わせて使用することで、大量のデータを効率的かつ費用対効果の高い方法で分析および処理できます。

MaxCompute の外部テーブル機能

MaxCompute V2.0 の次世代コンピューティングフレームワークでは、外部テーブル機能を使用して、データを MaxCompute テーブルにロードすることなく、OSS 内の多数のファイルを直接クエリできます。これにより、データ移行に必要な時間と労力のコストが削減され、ストレージコストが削減されます。

次の図は、MaxCompute の外部テーブルの全体アーキテクチャを示しています。架构图

MaxCompute では、OSS や Tablestore のデータなど、非構造化データの外部テーブルを作成できます。非構造化データ処理フレームワークにより、MaxCompute は、データ転送および処理ロジックに基づいて、OSS または Tablestore からデータをインポートしたり、OSS または Tablestore にデータをエクスポートしたりできます。次のコンテンツでは、OSS 外部テーブルを例として使用して、処理ロジックを説明します。

  1. OSS バケットからの外部データは、非構造化フレームワークに基づいて変換され、Java の InputStream クラスに渡されます。EXTRACT ロジックのコードを記述できます。これは、入力ストリームからデータを読み取り、解析、変換、および計算する必要があることを示しています。抽出されたデータレコードの形式は、MaxCompute でサポートされている必要があります。

  2. 抽出されたデータレコードは、MaxCompute の組み込みの構造化 SQL 計算エンジンによってさらに処理できます。処理中にさらに多くのデータレコードが生成される場合があります。

  3. 生成されたデータレコードは、ユーザー定義の出力ロジックに渡され、さらに計算と変換が行われます。最後に、システムは OutputStream Java クラスを使用して、データレコードに必要なデータを OSS にエクスポートします。

DataWorks を MaxCompute と組み合わせて使用すると、DataWorks コンソールで視覚的なインターフェースを使用して、外部テーブルを作成、検索、および構成できます。また、外部テーブルのデータのクエリ、処理、および分析を行うこともできます。

ネットワークとアクセス承認

MaxCompute は OSS とは別個です。したがって、異なるクラスター上の MaxCompute と OSS 間のネットワーク接続は、MaxCompute が OSS に格納されているデータにアクセスする機能に影響を与える可能性があります。MaxCompute から OSS に格納されているデータにアクセスする場合は、-internal.aliyuncs.com で終わる内部エンドポイントを使用することをお勧めします。

MaxCompute は、OSS に格納されているデータにアクセスするために、安全な承認済みチャネルを必要とします。MaxCompute は、Alibaba Cloud のリソースアクセス管理 (RAM) とセキュリティトークンサービス (STS) を使用してデータアクセスを保護します。MaxCompute は、テーブル作成者として STS からデータアクセス許可を申請します。Tablestore の権限設定は、OSS の権限設定と同じです。

  1. STS 承認を実行します。

    MaxCompute の外部テーブル機能を使用して OSS データにアクセスするには、MaxCompute ジョブを実行するために使用されるアカウントに OSS アクセス許可を付与する必要があります。STS は、Alibaba Cloud の RAM サービスによって提供されるトークン管理サービスです。STS に基づいて、承認された RAM ユーザーとクラウドサービスは、カスタムの有効期間と権限を持つトークンを発行できます。アプリケーションはトークンを使用して Alibaba Cloud API オペレーションを呼び出し、リソースを操作できます。

    次のいずれかの方法を使用して、OSS アクセス許可を付与できます。

    • MaxCompute プロジェクトとアクセスする OSS バケットが同じ Alibaba Cloud アカウントに属している場合は、そのアカウントで DataWorks コンソールにログオンし、ワンクリック承認を実行します。

      1. 新しく作成したテーブルの構成タブを開き、[物理モデル] セクションを見つけます。

      2. [テーブルの種類][外部テーブル] に設定します。

      3. [ストレージアドレス] パラメーターを構成し、[承認] をクリックします。一键授权

      4. [クラウド リソース アクセス承認] ページで、[承認ポリシーの確認] をクリックします。1

    • RAM コンソールで、OSS に格納されているデータにアクセスするための権限を MaxCompute に付与します。

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

        説明

        MaxCompute プロジェクトとアクセスする OSS バケットが異なる Alibaba Cloud アカウントに属している場合は、OSS バケットが属しているアカウントを使用して RAM コンソールにログオンし、次の操作を実行する必要があります。

      2. 左側のナビゲーションペインで、[ID] > [ロール] を選択します。

      3. [ロール] ページで、[ロールの作成] をクリックします。[ロールの作成] パネルで、[信頼できるエンティティの選択] を [alibaba Cloud アカウント] に設定し、[次へ] をクリックします。

      4. [RAM ロールの名前] パラメーターと [メモ] パラメーターを構成します。

        説明

        ロール名は、AliyunODPSDefaultRole または AliyunODPSRoleForOtherUser に設定する必要があります。

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

        説明

        [他の Alibaba Cloud アカウント] を選択した場合は、アカウント ID を入力します。

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

        [ロール] ページで、目的のロールを見つけ、[ロール名] 列にあるロールの名前をクリックします。表示されるページの [信頼ポリシー] タブで、[信頼ポリシーの編集] をクリックし、ビジネス要件に基づいてポリシードキュメントを入力します。

        -- 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", // VPC の記述
                        "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 データソースを DataWorks に追加した場合は、DataWorks コンソールの [ワークスペース] ページで作成したワークスペースを見つけ、[アクション] 列の [管理] をクリックして SettingCenter ページに移動します。次に、SettingCenter の [データソース] ページでデータソースを表示して使用します。

外部テーブルの作成

  1. DDL ステートメントを実行して外部テーブルを作成します。

    [datastudio] ページに移動し、DDL ステートメントを実行して外部テーブルを作成します。詳細については、「MaxCompute テーブルの作成と管理」をご参照ください。DDL ステートメントは、MaxCompute 構文に準拠している必要があります。STS 承認が完了している場合は、DDL ステートメントに odps.properties.rolearn プロパティを含める必要はありません。

    次のコードは、サンプルの DDL ステートメントを示しています。ここで、EXTERNAL は外部テーブルを示します。

    CREATE EXTERNAL TABLE IF NOT EXISTS ambulance_data_csv_external( // 外部テーブル ambulance_data_csv_external を作成します。存在する場合は作成しません。
    vehicleId int, // vehicleId 列。データ型は int です。
    recordId int, // recordId 列。データ型は int です。
    patientId int, // patientId 列。データ型は int です。
    calls int, // calls 列。データ型は int です。
    locationLatitute double, // locationLatitute 列。データ型は double です。
    locationLongtitue double, // locationLongtitue 列。データ型は double です。
    recordTime string, // recordTime 列。データ型は string です。
    direction string // direction 列。データ型は string です。
    )
    
    STORED BY 'com.aliyun.odps.udf.example.text.TextStorageHandler' -- 必須。STORED BY 句は、外部テーブルのカスタムストレージハンドラークラスまたは別のファイル形式の名前を指定します。
    with SERDEPROPERTIES (
    'delimiter'='\\|', -- オプション。SERDEPROPERTIES 句は、データのシリアル化またはデシリアル化時に使用されるパラメーターを指定します。これらのパラメーターは、DataAttributes を介して EXTRACT ロジックに渡すことができます。
    'odps.properties.rolearn'='acs:ram::xxxxxxxxxxxxx:role/aliyunodpsdefaultrole' // RAM ロールの ARN。
    )
    LOCATION 'oss://oss-cn-shanghai-internal.aliyuncs.com/oss-odps-test/Demo/SampleData/CustomTxt/AmbulanceData/'     -- 必須。LOCATION パラメーターは、外部テーブルの場所を指定します。
    USING 'odps-udf-example.jar'; -- カスタム形式クラスを使用する場合は必須。USING パラメーターは、カスタム形式クラスが存在する JAR パッケージを指定します。

    STORED BY の後に、CSV または TSV ファイルの組み込みストレージハンドラーを示すパラメーターを続けることができます。

    • com.aliyun.odps.CsvStorageHandler: CSV ファイルからデータを読み取り、CSV ファイルにデータを書き込む方法を定義します。この指定では、列区切り文字はカンマ (,) で、改行は \n です。例: STORED BY'com.aliyun.odps.CsvStorageHandler'

    • com.aliyun.odps.TsvStorageHandler: TSV ファイルからデータを読み取り、TSV ファイルにデータを書き込む方法を定義します。この指定では、列区切り文字は \t で、改行は \n です。

    STORED BY の後に、[データが次のオープンソース形式のいずれかである外部テーブル] を示すパラメーターを続けることもできます: ORC、PARQUET、SEQUENCEFILE、RCFILE、AVRO、および TEXTFILE。たとえば、org.apache.hive.hcatalog.data.JsonSerDe クラスを指定して、テーブルをテキストファイルとして保存できます。

    • org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe -> textfile として保存

    • org.apache.hadoop.hive.ql.io.orc.OrcSerde -> orc として保存

    • org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe -> parquet として保存

    • org.apache.hadoop.hive.serde2.avro.AvroSerDe -> avro として保存

    • org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe -> sequencefile として保存

    データがオープンソース形式である外部テーブルを作成するために使用される DDL ステートメント:

      CREATE EXTERNAL TABLE [IF NOT EXISTS] (<column schemas>) // 外部テーブルを作成します。存在する場合は作成しません。
      [PARTITIONED BY (partition column schemas)] // パーティション列スキーマによってパーティション化されます。
      [ROW FORMAT SERDE ''] // 行形式 SERDE。
      STORED AS // として格納。
      [WITH SERDEPROPERTIES ( 'odps.properties.rolearn'='${roleran}' // SERDE プロパティ。
      [,'name2'='value2',...] // その他のプロパティ。
      ) ]
      LOCATION 'oss://${endpoint}/${bucket}/${userfilePath}/'; // 場所。

    次の表では、SERDEPROPERTIES 句のプロパティについて説明します。

    プロパティ

    有効な値

    デフォルト値

    説明

    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 では、組み込みのエクストラクターのみを使用して、GZIP 形式の CSV または TSV ファイルを OSS から読み取ることができます。ファイルが GZIP 圧縮されているかどうかを選択できます。これにより、指定する必要のあるプロパティが決まります。

    LOCATION パラメーターは、oss://oss-cn-shanghai-internal.aliyuncs.com/バケット名/ディレクトリ名 形式です。グラフィカルユーザーインターフェース (GUI) で OSS ディレクトリを取得できます。ディレクトリの横にファイル名を追加する必要はありません。

    DDL ステートメントを使用して作成されたテーブルは、[ワークスペース テーブル] ペインにあります。テーブルのレベル 1 フォルダーとレベル 2 フォルダーを変更して、テーブルの場所を変更できます。

  2. Tablestore 外部テーブルを作成します。

    Tablestore 外部テーブルを作成するために使用されるステートメント:

    CREATE EXTERNAL TABLE IF NOT EXISTS ots_table_external( // 外部テーブル ots_table_external を作成します。存在する場合は作成しません。
    odps_orderkey bigint, // odps_orderkey 列。データ型は bigint です。
    odps_orderdate string, // odps_orderdate 列。データ型は string です。
    odps_custkey bigint, // odps_custkey 列。データ型は bigint です。
    odps_orderstatus string, // odps_orderstatus 列。データ型は string です。
    odps_totalprice double // odps_totalprice 列。データ型は double です。
    )
    STORED BY 'com.aliyun.odps.TableStoreStorageHandler' // TableStoreStorageHandler によって格納されます。
    WITH SERDEPROPERTIES (
    'tablestore.columns.mapping'=':o_orderkey,:o_orderdate,o_custkey, o_orderstatus,o_totalprice', // (3) 列マッピング。
    'tablestore.table.name'='ots_tpch_orders', // Tablestore テーブルの名前。
    'odps.properties.rolearn'='acs:ram::xxxxx:role/aliyunodpsdefaultrole' // RAM ロールの ARN。
    )
    LOCATION 'tablestore://odps-ots-dev.cn-shanghai.ots-internal.aliyuncs.com'; // 場所。

    パラメーターの説明:

    • com.aliyun.odps.TableStoreStorageHandler は、Tablestore に格納されているデータを処理するための MaxCompute の組み込みストレージハンドラーを指定します。

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

      • tablestore.columns.mapping: 必須。このパラメーターは、MaxCompute がアクセスする Tablestore テーブルの列を指定します。列には、プライマリキー列とプロパティ列が含まれます。プライマリキー列は、列名の先頭にコロン記号 (:) を付けて示されます。この例では、プライマリキー列は :o_orderkey:o_orderdate です。その他はプロパティ列です。

        Tablestore テーブルは、最大 4 つのプライマリキー列をサポートします。これらの列のデータ型は、STRING、INTEGER、または BINARY である必要があります。最初のプライマリキー列は、パーティションキー列でもあります。マッピングを指定する場合は、Tablestore のテーブルのすべてのプライマリキー列を指定する必要があります。他の列については、MaxCompute がアクセスする必要のあるプロパティ列のみを指定する必要があります。

      • tablestore.table.name: Tablestore テーブルの名前。テーブル名が Tabletore に存在しない場合は、エラーが報告され、MaxCompute は Tabletore にテーブルを作成しません。

    • LOCATION: Tablestore インスタンスの名前と エンドポイント を指定します。

  3. GUI でテーブルを作成します。

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

    • [全般]

      • テーブル名 (テーブルの作成時に入力)

      • 表示名

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

      • 説明

    • 物理モデル

      • テーブルの種類: [外部テーブル] を選択します。

      • パーティションの種類: Tablestore 外部テーブルはパーティション分割をサポートしていません。

      • ストレージアドレス: LOCATION パラメーターに対応します。 [物理モデル] セクションで、LOCATION パラメーターの値をストレージアドレスとして入力できます。 また、[選択] をクリックしてストレージアドレスを選択することもできます。 その後、[承認] をクリックします。

      • ファイル形式: ビジネス要件に基づいてファイル形式を選択します。 サポートされている形式は、CSV、TSV、ORC、PARQUET、SEQUENCEFILE、RCFILE、AVRO、TEXTFILE、およびカスタムファイル形式です。 カスタムファイル形式を選択する場合は、対応するリソースを選択する必要があります。 リソースをコミットすると、DataWorks は含まれているクラス名を自動的に解析し、[クラス名] ドロップダウンリストに表示します。

      • rolearn: STS 認証を完了している場合は、空のままにしておくことができます。

    • [スキーマ]表结构设计

      パラメーター

      説明

      [データ型]

      MaxCompute 2.0 は、TINYINT、SMALLINT、INT、BIGINT、VARCHAR、および STRING 型のフィールドをサポートしています。

      [アクション]

      追加、変更、および削除操作がサポートされています。

      [定義または最大値の長さ]

      VARCHAR 型のフィールドの最大長を設定できます。複雑なデータ型の場合は、定義を入力します。

サポートされているデータ型

次の表では、外部テーブルでサポートされている基本的なデータ型について説明します。

データ型

新規

説明

TINYINT

はい

1Y および -127Y

8 ビット符号付き整数型。有効な値: -128 ~ 127。

SMALLINT

はい

32767S および -100S

16 ビット符号付き整数型。有効な値: -32768 ~ 32767。

INT

はい

1000 および -15645787

32 ビット符号付き整数型。有効な値: -2^31 ~ 2^31-1。

BIGINT

いいえ

100000000000L および -1L

64 ビット符号付き整数型。有効な値: -2^63+1 ~ 2^63-1。

FLOAT

はい

なし

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

DOUBLE

いいえ

3.1415926 1E+7

8 バイト倍精度浮動小数点数 (64 ビットバイナリ浮動小数点型)。

DECIMAL

いいえ

3.5BD および 99999999999.9999999BD

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

VARCHAR(n)

はい

なし

可変長文字型。ここで、n は長さを指定します。有効な値: 1 ~ 65535。

STRING

いいえ

"abc"、'bcd'、および "alibaba"

文字列型。最大サイズは 8 MB です。

BINARY

はい

なし

2 進数。最大サイズは 8 MB です。

DATETIME

いいえ

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

DATETIME 型。UTC+8 が標準タイムゾーンとして使用されます。有効な値: 0000-01-01 ~ 9999-12-31、ミリ秒単位まで正確。

TIMESTAMP

はい

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

タイムゾーンに依存しない TIMESTAMP データ型。有効な値: 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 との互換性が必要な場合は、odps.sql.hive.compatible=true; ステートメントを含めることをお勧めします。

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

外部テーブルを表示するには、次の操作を実行します。[datastudio] ページに移動します。左側のナビゲーションペインで、[ワークスペース テーブル] をクリックします。詳細については、「テーブルの管理」をご参照ください。外部テーブルは、内部テーブルと同じ方法で処理されます。