このトピックでは、Object Storage Service (OSS) の RCFile 外部テーブルを作成し、そこからデータを読み取り、データを書き込む方法について説明します。
適用範囲
OSS 外部テーブルはクラスタープロパティをサポートしていません。
単一ファイルのサイズは 2 GB を超えることはできません。ファイルが大きすぎる場合は、分割してください。
MaxCompute と OSS は同じリージョンにある必要があります。
サポートされるデータ型
MaxCompute のデータ型の詳細については、「データ型 (バージョン 1.0)」および「データ型 (バージョン 2.0)」をご参照ください。
データ型 | サポート | データ型 | サポート |
TINYINT |
| STRING |
|
SMALLINT |
| DATE |
|
INT |
| DATETIME |
|
BIGINT |
| TIMESTAMP |
|
BINARY |
| TIMESTAMP_NTZ |
|
FLOAT |
| BOOLEAN |
|
DOUBLE |
| ARRAY |
|
DECIMAL(precision, scale) |
| MAP |
|
VARCHAR(n) |
| STRUCT |
|
CHAR(n) |
| JSON |
|
外部テーブルの作成
構文
CREATE EXTERNAL TABLE [IF NOT EXISTS] mc_oss_rcfile_extable
(
<col_name> <data_type>,
...
)
[COMMENT <table_comment>]
[PARTITIONED BY (<col_name> <data_type>, ...)]
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.columnar.LazyBinaryColumnarSerDe'
STORED AS rcfile
LOCATION 'oss_location';パラメーター
詳細については、「基本的な構文パラメーター」をご参照ください。
データの書き込み
MaxCompute から OSS にデータを書き込む構文の詳細については、「OSS へのデータの書き込み」をご参照ください。
クエリと分析
SELECT 構文の詳細については、「OSS からのデータの読み取り」をご参照ください。
クエリプランの最適化の詳細については、「クエリの最適化」をご参照ください。
シナリオ例
この例では、組み込みのオープンソースデータパーサーを使用して RCFile 外部テーブルを作成し、OSS にデータを書き込み、そのデータをクエリする方法を示します。
前提条件
OSS のバケットとフォルダを利用できます。詳細については、「バケットを作成する」と「フォルダを管理する」をご参照ください。
MaxCompute は OSS でのフォルダの自動作成をサポートしています。SQL 文に外部テーブルとユーザー定義関数 (UDF) が含まれている場合、1 つの文でテーブルの読み取りと書き込み、および UDF の使用が可能です。フォルダは手動で作成することもできます。
MaxCompute は特定のリージョンにのみデプロイされます。リージョン間のデータ接続で発生する可能性のある問題を回避するため、ご利用の OSS バケットが MaxCompute プロジェクトと同じリージョンにあることを確認してください。
権限付与
OSS にアクセスするための権限が必要です。Alibaba Cloud アカウント、Resource Access Management (RAM) ユーザー、または RAM ロールを使用して OSS 外部テーブルにアクセスできます。権限付与の詳細については、「OSS へのアクセスのための STS モードでの権限付与」をご参照ください。
MaxCompute プロジェクトで CreateTable 権限が必要です。テーブル権限の詳細については、「MaxCompute 権限」をご参照ください。
テストデータのアップロード
OSS コンソールにログオンし、RCFile データファイルを OSS バケット内の
oss-mc-test/Rcfile/dt=20241223/フォルダにアップロードします。詳細については、「OSS にファイルをアップロードする」をご参照ください。RCFile 外部テーブルの作成
CREATE EXTERNAL TABLE mc_oss_rcfile_extable ( vehicleId STRING , recordId STRING, patientId STRING, calls STRING, locationLatitute STRING, locationLongtitue STRING, recordTime STRING, direction STRING ) PARTITIONED BY (dt STRING) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.columnar.LazyBinaryColumnarSerDe' STORED AS rcfile LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/oss-mc-test/Rcfile/';パーティションデータのインポート。OSS 外部テーブルがパーティションテーブルである場合は、パーティションデータもインポートする必要があります。詳細については、「OSS 外部テーブルにパーティションデータを追加するための構文」をご参照ください。
-- パーティションデータをインポートします。 MSCK REPAIR TABLE mc_oss_rcfile_extable ADD PARTITIONS;RCFile 外部テーブルのクエリ
SELECT * FROM mc_oss_rcfile_extable2_pt WHERE dt=20241223; -- 以下の結果が返されます: +------------+------------+------------+------------+------------------+-------------------+------------------+------------+------------+ | vehicleid | recordid | patientid | calls | locationlatitute | locationlongtitue | recordtime | direction | dt | +------------+------------+------------+------------+------------------+-------------------+------------------+------------+------------+ | 1 | 1 | 7 | 1 | 39.995353 | 116.410101 | 2025/12/23 10:01 | NW | 20241223 | | 1 | 2 | 15 | 1 | 39.996123 | 116.412345 | 2025/12/24 10:01 | NE | 20241223 | | 2 | 3 | 22 | 2 | 40.001234 | 116.425678 | 2025/12/25 10:01 | SE | 20241223 | | 1 | 4 | 71 | 1 | 39.998888 | 106.419999 | 2025/12/26 10:01 | NW | 20241223 | | 3 | 5 | 50 | 1 | 29.989999 | 116.401111 | 2025/12/27 10:01 | NE | 20241223 | | 2 | 6 | 28 | 3 | 40.003456 | 110.42891 | 2025/12/28 10:01 | NW | 20241223 | | 4 | 7 | 20 | 2 | 39.991234 | 116.435555 | 2025/12/29 10:01 | NE | 20241223 | | 1 | 8 | 13 | 1 | 39.994567 | 116.41789 | 2025/12/30 10:01 | SE | 20241223 | +------------+------------+------------+------------+------------------+-------------------+------------------+------------+------------+RCFile 外部テーブルへのデータの書き込み
INSERT INTO TABLE mc_oss_rcfile_extable2_pt PARTITION (dt=20251223) VALUES ('1','13','76','1','46.81006','-92.08174','9/14/2014 0:10','SW');データが正常に書き込まれたかの確認
SELECT * FROM mc_oss_rcfile_extable2_pt WHERE dt=20250521 AND recordId='13'; -- 以下の結果が返されます。 +------------+------------+------------+------------+------------------+-------------------+----------------+------------+------------+ | vehicleid | recordid | patientid | calls | locationlatitute | locationlongtitue | recordtime | direction | dt | +------------+------------+------------+------------+------------------+-------------------+----------------+------------+------------+ | 1 | 13 | 76 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:10 | SW | 20251223 | +------------+------------+------------+------------+------------------+-------------------+----------------+------------+------------+