このトピックでは、Hologres 外部テーブルの作成方法について説明します。また、CREATE EXTERNAL TABLE 文で Hologres データソースの指定、STS 認証情報の構成または二重署名の有効化、対象テーブルのマッピング、Java Database Connectivity (JDBC) ドライバーの詳細を設定する方法についても解説します。
はじめに
Hologres は PostgreSQL プロトコルと互換性のあるリアルタイムインタラクティブ分析データウェアハウスです。ストレージレイヤーで MaxCompute とシームレスに統合されています。MaxCompute 内に Hologres 外部テーブルを作成し、PostgreSQL JDBC ドライバーおよび STS 認証情報 を使用して Hologres データソースから直接クエリできます。この方法により、冗長なストレージを回避し、データのインポートやエクスポートが不要になり、高速なクエリ結果が得られます。
適用範囲
データ操作言語 (DML) 操作
MaxCompute は Hologres 外部テーブルに対する UPDATE または DELETE 操作をサポートしていません。
Hologres 外部テーブルに対して INSERT OVERWRITE 操作はサポートされていません。
MaxCompute から Hologres へデータを上書きするには、Hologres 側で MaxCompute テーブルに対応する外部テーブルを読み取り、Hologres の INSERT OVERWRITE セマンティクスを使用してください。詳細については、「INSERT OVERWRITE」をご参照ください。
データ書き込みリスク
Hologres 外部テーブルに大量のデータを書き込む場合、複数プロセスによる並列書き込みによってデータの再書き込みが発生し、重複することがあります。
パーティション
Hologres のパーティションテーブルは MaxCompute のパーティションテーブルに対応しません。Hologres 外部テーブルはパーティションをサポートしていません。ただし、ダイレクトリードモードでは、Hologres のパーティション親テーブルに対応する Hologres 外部テーブルをクエリする際に、クエリ条件が子テーブルのパーティションキー列と一致する場合、パーティションプルーニングが適用されます。
Hologres 外部テーブルはクラスター プロパティをサポートしていません。
Hologres 外部テーブルは Hologres の動的テーブル (Dynamic Table) に対応できません。
Hologres 外部テーブルの作成
Hologres 外部テーブルは STS モードまたは二重署名モードで作成します。
注意事項
外部テーブル作成ルール
Hologres で IP アドレスホワイトリストを有効にしている場合、Hologres 外部テーブルは二重署名モードで作成する必要があります。STS モードで作成すると、IP アドレスホワイトリストにより MaxCompute からの Hologres へのアクセスがブロックされます。
Hologres の親テーブルおよび子テーブルの場合、テーブル名は Hologres 外部テーブルおよび SQL 文で指定されます。親テーブルおよび子テーブルのいずれも Hologres 外部テーブルに対応できますが、親テーブルは読み取り専用です。
Hologres 外部テーブルにデータを書き込む際、Hologres の INSERT ON CONFLICT (UPSERT) 機構はサポートされていません。Hologres ソーステーブルにプライマリキーが存在する場合、書き込むデータがソーステーブルのプライマリキー一意性制約に違反しないことを確認してください。
テーブル名およびフィールド名は大文字と小文字を区別しません。テーブルおよびフィールドの作成時、クエリ時、参照時に強制的に大文字・小文字変換を行うことはできません。
スキーマ互換性
Hologres ソーステーブルのスキーマが外部テーブルのスキーマと異なる場合:
列数の不一致: Hologres ソーステーブルの列数が外部テーブルのデータ定義言語 (DDL) 文の列数より少ない場合、Hologres からデータを読み取る際にエラーが発生します。たとえば、エラーメッセージ
column "xxx" does not existが表示されます。Hologres ソーステーブルの列数が DDL 文の列数より多い場合、余分な列は無視されます。列のデータ型の不一致: MaxCompute は Hologres ソーステーブルから STRING データを受信するために INT 型を使用することをサポートしていません。STRING 型を使用して INT データを受信することは可能ですが、推奨されません。
構文
外部テーブルを作成する際、CREATE EXTERNAL TABLE DDL 文で StorageHandler を指定し、STS 認証情報を構成するか二重署名を有効にして JDBC エンドポイントを指定することで、Hologres データソースにアクセスします。
STS モードでの Hologres 外部テーブルの作成
サンプルコードについては、「Hologres 外部テーブルの作成 (STS モード)」をご参照ください。
CREATE EXTERNAL TABLE [IF NOT EXISTS] <table_name>(
<col1_name> <data_type>,
<col2_name> <data_type>,
......
)
stored BY 'com.aliyun.odps.jdbc.JdbcStorageHandler'
WITH serdeproperties (
'odps.properties.rolearn'='<ram_arn>')
location '<jdbc:postgresql://<endpoint>:<port>/<database>?ApplicationName=MaxCompute&[currentSchema=<schema>&][useSSL={true|false}&]table=<holo_table_name>/>'
tblproperties (
'mcfed.mapreduce.jdbc.driver.class'='org.postgresql.Driver',
'odps.federation.jdbc.target.db.type'='holo',
'odps.federation.jdbc.colmapping'='<table_column1>:<source_column1>, <table_column2>:<source_column2>,...'
);二重署名モードでの Hologres 外部テーブルの作成
サンプルコードについては、「Hologres 外部テーブルの作成 (二重署名モード)」をご参照ください。
二重署名モードで作成された Hologres 外部テーブルを使用すると、同じ RAM ユーザーが MaxCompute および Hologres の許可されたテーブルに手動での権限付与なしにアクセスできます。このモードは Hologres の IP アドレスホワイトリスト機能もサポートしています。
-- 二重署名モードを有効にします。
SET odps.sql.common.table.planner.ext.hive.bridge=true;
-- 外部テーブルを作成します。
CREATE EXTERNAL TABLE [IF NOT EXISTS] <table_name>(
<col1_name> <data_type>,
<col2_name> <data_type>,
......
)
STORED BY '<com.aliyun.odps.jdbc.JdbcStorageHandler>'
LOCATION '<jdbc:postgresql://<endpoint>:<port>/<database>?ApplicationName=MaxCompute&[currentSchema=<schema>&][useSSL={true|false}&]table=<holo_table_name>/>'
tblproperties (
'mcfed.mapreduce.jdbc.driver.class'='org.postgresql.Driver',
'odps.federation.jdbc.target.db.type'='holo',
['odps.federation.jdbc.colmapping'='<table_column1>:<source_column1>, <table_column2>:<source_column2>,...']
);パラメーター
パラメーター | 必須 | 説明 |
odps.sql.common.table.planner.ext.hive.bridge | はい | Hologres 外部テーブルを二重署名モードで作成するかどうかを指定します。 |
いいえ | STS モードで Hologres 外部テーブルを作成する場合は、このパラメーターを指定する必要はありません。 | |
IF NOT EXISTS | いいえ |
|
table_name | はい | MaxCompute に作成する Hologres 外部テーブルの名前です。 |
col_name | はい | Hologres 外部テーブルの列名です。 |
data_type | はい | Hologres 外部テーブルの列のデータ型です。 |
STORED BY | はい | StorageHandler を指定します。これは Hologres 外部テーブルのクエリ方法を定義します。 値は |
ram_arn | はい | STS モードで Hologres 外部テーブルを作成する場合に必須です。外部テーブル作成時の STS 認証に使用する RAM ロールの Alibaba Cloud リソースネーム (ARN) を指定します。RAM ロールの作成および権限付与方法については、「Hologres での STS モードによる通常の RAM ロールの権限付与」をご参照ください。
|
いいえ | 二重署名モードで Hologres 外部テーブルを作成する場合は、このパラメーターを指定する必要はありません。 | |
LOCATION | はい | Hologres インスタンスの JDBC エンドポイントです。エンドポイントには以下のパラメーターが含まれます。
|
tblproperties | はい |
|
例
データの準備
すでに Hologres データベース、Hologres テーブル、およびテストデータがある場合は、このステップをスキップしてください。
Hologres データベースの作成
Hologres 管理コンソール にログインし、左上隅でリージョンを選択します。
左側のナビゲーションウィンドウで、[インスタンス]を選択します。
Hologres インスタンスがない場合は、まず「Hologres インスタンスの購入」を行ってください。
「[インスタンス]」ページで、対象のインスタンス名をクリックします。
インスタンスの詳細ページで、[インスタンスに接続] をクリックします。
上部の [メタデータ管理] タブをクリックします。
Create Database をクリックします。表示されるダイアログボックスで、Database Name を入力し、他のパラメーターはデフォルト設定のままにします。
Hologres テーブルの作成
インスタンスの詳細ページで、[インスタンスに接続] をクリックします。
上部の [SQL Editor] タブをクリックします。
以下の文を入力します。
CREATE TABLE IF NOT EXISTS holo ( id INT PRIMARY KEY, name TEXT ); INSERT INTO holo (id, name) VALUES (1, 'kate'), (2, 'mary'), (3, 'bob'), (4, 'tom'), (5, 'lulu'), (6, 'mark'), (7, 'haward'), (8, 'lilei'), (9, 'hanmeimei'), (10, 'lily'), (11, 'lucy'); SELECT * FROM holo ORDER BY id;
Hologres 外部テーブルの作成 (STS モード)
Hologres は、別の Alibaba Cloud アカウントの RAM ロールをデータベースインスタンスに追加することをサポートしていません。そのため、Hologres での通常のロール権限付与の STS モードは、同一アカウントに属する RAM ロールのみをサポートします。同様に、MaxCompute が Hologres 外部テーブルまたは外部スキーマにアクセスする場合も、同一アカウントの RAM ロールのみがサポートされます。
前提条件
「MaxCompute クライアントのインストールおよび構成」を行ってください。
Hologres 外部テーブルを作成するための MaxCompute プロジェクトを準備してください。
MaxCompute プロジェクトの作成方法の詳細については、「MaxCompute プロジェクトの作成」をご参照ください。
RAM ロールの作成および権限付与方法については、「Hologres での STS モードによる通常の RAM ロールの権限付与」をご参照ください。
MaxCompute での外部テーブルの作成
MaxCompute クライアントにログインし、対象の MaxCompute プロジェクトに入ります。
以下のコマンドを実行して Hologres 外部テーブルを作成します。
以下の Hologres インスタンス情報は「データの準備」セクションの手順に基づいています。
Hologres データベース名:
holo_external_test。Hologres データベーススキーマ:
public。Hologres テーブル名:
holo。Hologres データベースのクラシックネットワークエンドポイント:
hgprecn-cn-oew210ut****-cn-hangzhou-internal.hologres.aliyuncs.com:80。
CREATE EXTERNAL TABLE IF NOT EXISTS my_table_holo_jdbc ( id bigint, name string ) stored BY 'com.aliyun.odps.jdbc.JdbcStorageHandler' WITH serdeproperties ( 'odps.properties.rolearn'='acs:ram::139699392458****:role/<role name>') location 'jdbc:postgresql://hgprecn-cn-oew210ut****-cn-hangzhou-internal.hologres.aliyuncs.com:80/<holo database name>?ApplicationName=MaxCompute¤tSchema=public&useSSL=true&table=<table name>/' tblproperties ( 'mcfed.mapreduce.jdbc.driver.class'='org.postgresql.Driver', 'odps.federation.jdbc.target.db.type'='holo', 'odps.federation.jdbc.colmapping'='id:id,name:name' );以下のコマンドを実行して、新しい Hologres 外部テーブルを使用して Hologres ソーステーブルをクエリします。
-- Hologres 外部テーブルにアクセスするには、以下のプロパティを追加する必要があります。 SET odps.sql.split.hive.bridge=true; SET odps.sql.hive.compatible=true; SET odps.table.api.enable.holo.table=true; -- JDBC ダイレクトリードモードを有効にします。 -- Hologres 外部テーブルからデータをクエリします。 SELECT * FROM my_table_holo_jdbc limit 10; -- 以下の結果が返されます。 +------------+------------+ | id | name | +------------+------------+ | 9 | hanmeimei | | 4 | tom | | 7 | haward | | 2 | mary | | 5 | lulu | | 8 | lilei | | 10 | lily | | 1 | kate | | 6 | mark | | 11 | lucy | +------------+------------+Hologres 外部テーブルを使用して Hologres とのデータ交換および結合分析を行います。
Hologres 外部テーブルを使用して、MaxCompute で処理されたデータを Hologres に書き込み、分析の高速化およびオンラインサービスを実現します。以下のサンプルコマンドを提供します。
-- Hologres 外部テーブルにアクセスするには、以下のプロパティを追加する必要があります。 SET odps.sql.split.hive.bridge=true; SET odps.sql.hive.compatible=true; SET odps.table.api.enable.holo.table=true; -- JDBC ダイレクトリードモードを有効にします。 -- Hologres 外部テーブルにデータを挿入します。 INSERT INTO my_table_holo_jdbc VALUES (12,'alice'); -- Hologres 外部テーブルからデータをクエリします。 SELECT * FROM my_table_holo_jdbc; -- 以下の結果が返されます。 +------------+------------+ | id | name | +------------+------------+ | 9 | hanmeimei | | 4 | tom | | 7 | haward | | 2 | mary | | 5 | lulu | | 12 | alice | | 8 | lilei | | 10 | lily | | 1 | kate | | 11 | lucy | | 6 | mark | | 3 | bob | +------------+------------+頻繁に更新されるディメンションテーブルを Hologres に格納し、リアルタイム動的更新要件を満たします。MaxCompute は外部テーブルを使用してこれらのディメンションテーブルにアクセスし、MaxCompute のファクトテーブルと結合分析を実行します。以下のサンプルコマンドを提供します。
-- Hologres 外部テーブルにアクセスするには、以下のプロパティを追加する必要があります。 SET odps.sql.split.hive.bridge=true; SET odps.sql.hive.compatible=true; -- MaxCompute 内部テーブルを作成します。 CREATE TABLE holo_test AS SELECT * FROM my_table_holo_jdbc; -- MaxCompute 内部テーブルと Hologres 外部テーブルの結合分析を実行します。 SELECT * FROM my_table_holo_jdbc t1 INNER JOIN holo_test t2 ON t1.id=t2.id; -- 以下の結果が返されます。 +------------+------------+------------+------------+ | id | name | id2 | name2 | +------------+------------+------------+------------+ | 9 | hanmeimei | 9 | hanmeimei | | 4 | tom | 4 | tom | | 7 | haward | 7 | haward | | 2 | mary | 2 | mary | | 5 | lulu | 5 | lulu | | 12 | alice | 12 | alice | | 8 | lilei | 8 | lilei | | 10 | lily | 10 | lily | | 1 | kate | 1 | kate | | 11 | lucy | 11 | lucy | | 6 | mark | 6 | mark | | 3 | bob | 3 | bob | +------------+------------+------------+------------+
Hologres 外部テーブルの作成 (二重署名モード)
二重署名は、MaxCompute と Hologres が共同で開発した認証および権限付与プロトコルです。このモードを使用すると、MaxCompute はアカウントのログイン情報を署名し、認証データを Hologres に渡します。その後、Hologres は MaxCompute と合意されたプロトコルに基づいて同一アカウントを認証および権限付与します。その結果、MaxCompute と Hologres で同一アカウントを使用して、追加の認証情報を構成せずに直接外部テーブルにアクセスできます。
前提条件
「MaxCompute クライアントのインストールおよび構成」を行ってください。
Hologres 外部テーブルを作成するための MaxCompute プロジェクトを準備してください。
MaxCompute プロジェクトの作成方法の詳細については、「MaxCompute プロジェクトの作成」をご参照ください。
MaxCompute アカウントと同じ名前のアカウントが Hologres に存在し、このアカウントが Hologres の対応するテーブルに対して読み取りおよび書き込み権限を持っている必要があります。
Hologres V1.3 以降でのみ、MaxCompute から二重署名モードで Hologres 外部テーブルを作成できます。現在、このモードは Hologres 外部テーブルからのデータ読み取りのみをサポートしており、Hologres 外部テーブルへのデータ書き込みはサポートされていません。
MaxCompute での外部テーブルの作成
MaxCompute クライアントにログインし、対象の MaxCompute プロジェクトに入ります。
以下のコマンドを実行して Hologres 外部テーブルを作成します。
以下の Hologres インスタンス情報は「データの準備」セクションの手順に基づいています。
Hologres データベース名:
holo_external_test。Hologres データベーススキーマ:
public。Hologres テーブル名:
holo。Hologres データベースのクラシックネットワークエンドポイント:
hgprecn-cn-oew210ut****-cn-hangzhou-internal.hologres.aliyuncs.com:80。
-- 外部テーブルを作成します。 CREATE EXTERNAL TABLE IF NOT EXISTS holo_mc_external_dbl ( id int, name string ) STORED BY 'com.aliyun.odps.jdbc.JdbcStorageHandler' location 'jdbc:postgresql://hgpostcn-cn-****-cn-hangzhou-internal.hologres.aliyuncs.com:80/<holo database name>?ApplicationName=MaxCompute¤tSchema=public&preferQueryMode=simple&useSSL=false&table=<table name>/' TBLPROPERTIES ( 'mcfed.mapreduce.jdbc.driver.class'='org.postgresql.Driver', 'odps.federation.jdbc.target.db.type'='holo', 'odps.federation.jdbc.colmapping'='id:id,name:name' );外部テーブルをクエリします。
-- 外部テーブルをクエリします。このコマンドは二重署名モードを有効にするコマンドと一緒に実行する必要があります。 SET odps.sql.common.table.planner.ext.hive.bridge=true; SELECT * FROM holo_mc_external_dbl; -- 以下の結果が返されます。 +------------+------------+ | id | name | +------------+------------+ | 9 | hanmeimei | | 4 | tom | | 7 | haward | | 2 | mary | | 5 | lulu | | 12 | alice | | 8 | lilei | | 10 | lily | | 1 | kate | | 11 | lucy | | 6 | mark | | 3 | bob | +------------+------------+
Hologres 外部テーブルのストレージからのダイレクトリードの有効化
MaxCompute は JDBC モードで Hologres 外部テーブルからデータを読み取ります。現在のバージョンでは、Hologres ストレージレイヤーから直接データを読み取ることをサポートしており、以下のようなメリットがあります。
テーブル読み取りレイテンシを大幅に削減し、データクエリ速度を向上させます。
Hologres フロントエンド (FE) ノードへの接続数を大幅に削減します。ほとんどのクエリでは 1 つの接続のみが必要です。
制限事項
Hologres のダイレクトリードを有効にすると、以下の制限事項が適用されます。いずれかの条件を満たさない場合、システムは JDBC モードにフォールバックします。
バージョン要件
Hologres インスタンスは V1.3.34 以降である必要があります。それ以前のバージョンではダイレクトリードをサポートしていません。
テーブルタイプの制限
Hologres コールドストレージテーブルのダイレクトリードはサポートされていません。
Hologres 行指向テーブルのダイレクトリードはサポートされていません。
データ型マッピングの制限
MaxCompute のダイレクトリードモードを使用する場合、Hologres の TIMESTAMP WITH TIME ZONE 型を TIMESTAMP 型にマッピングする際に、わずかな時間誤差が発生する可能性があります。違いは以下のとおりです。
時間値の誤差
Hologres の TIMESTAMP WITH TIME ZONE 列の時間が
1900-12-31 15:54:15より前の場合、MaxCompute でクエリされる時間は 5 分 44 秒遅くなります。Hologres の TIMESTAMP WITH TIME ZONE 列の時間が
1900-12-31 15:54:16から1969-12-31 23:59:58の間の場合、MaxCompute でクエリされる時間は 1 秒遅くなります。Hologres の TIMESTAMP WITH TIME ZONE 列の時間が
1969-12-31 23:59:59より後の場合、MaxCompute でクエリされる時間は Hologres の時間と一致します。
タイムゾーンオフセット
MaxCompute が UTC + 08:00 を使用しており、Hologres の TIMESTAMP WITH TIME ZONE 列の時間が
2000-01-01 00:00:00の場合、MaxCompute でクエリされる時間は2000-01-01 08:00:00になります。MaxCompute が UTC + 08:00 を使用しており、Hologres の TIMESTAMP WITH TIME ZONE 列の時間が
1969-01-01 00:00:00の場合、MaxCompute でクエリされる時間は1969-01-01 08:00:01になります。
同一リージョン制限
ネットワーク接続の制限により、同一リージョン内の MaxCompute インスタンスのみが Hologres インスタンスにアクセスできます。クロスリージョンアクセスでは、以下のエラーが返されます:
FAILED: ODPS-0010000:System internal error - fuxi job failed, caused by: Pangu request failed with error code 3。Hologres がマスタースレーブアーキテクチャで構成されている場合、プライマリインスタンスの接続 URL のみ使用できます。スレーブインスタンスの接続 URL はサポートされていません。
Foreign Server モードの追加制限事項: MaxCompute プロジェクトでスキーマレベルの構文スイッチを有効にする必要があります。
機能の有効化
MaxCompute で Hologres 外部テーブルをクエリする際に、SQL 文の前に以下のパラメーターを追加します。
SET odps.table.api.enable.holo.table=true;プロジェクトレベルのダイレクトリードスイッチを設定します。
-- プロジェクトレベルでダイレクトリードモードを有効にし、JDBC モードへのフォールバックを無効にできます。
-- プロジェクトレベルでダイレクトリードモードを有効にします:
setproject odps.table.api.enable.holo.table=true; -- true: 有効、false: 無効
-- デフォルトの JDBC モードへのフォールバックを無効にします:
setproject odps.table.api.allow.fallback.jdbc=false; -- true: フォールバック、false: フォールバックしないダイレクトリードモードの検証
Logview のログを確認して、クエリがダイレクトリードモードで実行されているかどうかをチェックできます。Logview の使用方法の詳細については、「Logview V2.0 を使用したジョブ情報の表示」をご参照ください。
Logview の Summary タブで、external holo tables フィールドのプロパティを確認します。形式は以下のとおりです。
<project_name>.<table_name>:<Access mode>[<(Fallback reason)>]パラメーターの説明:
パラメーター | 説明 |
project_name | プロジェクト名です。 |
table_name | テーブル名です。 |
Access mode | 外部テーブルのアクセスモードです。有効な値:
|
Fallback reason | Access mode が
|
ダイレクトリードモードで実行されているタスクが、まれにダイレクトリードの制限にヒットして JDBC モードにフォールバックすることがあります。ダイレクトリード中にワークロードが重い場合、JDBC モードへのフォールバックにより多くの Hologres 接続プールリソースを消費します。さらに、JDBC モードのデータ転送効率はダイレクトリードモードよりもはるかに低く、リソースの解放も遅くなります。
JDBC モードへのフォールバック後の Hologres インスタンスの負荷圧を監視してください。極端なケースでは、多数のフォールバックジョブが Hologres インスタンスにアクセスする他のサービスに影響を与える可能性があります。これを防ぐために、ダイレクトリードタスクに set odps.table.api.allow.fallback.jdbc=false; パラメーターを追加して自動フォールバックを無効にし、予期しない影響を回避してください。
Hologres データのインポートおよびエクスポート
サポートされるデータの型
DECIMAL 型の制限事項:
MaxCompute に作成された Hologres 外部テーブルでは、
DECIMALデータ型はdecimal(38,18)に固定されており、変更できません。ソーステーブルの小数点以下の桁数が少ない場合、MaxCompute 外部テーブルで列をSTRING型として定義し、必要に応じてCAST関数を使用して変換してください。複合型の制限事項:
MaxCompute に作成された Hologres 外部テーブルは、
Array、Map、Structなどの複合データ型をサポートしていません。その他の非互換型:
Hologres の
MONEYなどのデータ型は、MaxCompute に対応するデータ型がなく、サポートされていません。
以下の表に詳細を示します。:
Hologres データ型 | MaxCompute データ型 | JDBC 読み取り | JDBC 書き込み | ダイレクトリード (odps.table.api.enable.holo.table=true) | 説明 |
INTEGER (エイリアス: INT または INT4) | INT | 32 ビット符号付き整数。 | |||
TEXT | STRING、VARCHAR | 文字列型。現在の長さ制限は 8 MB です。 | |||
SMALLINT | SMALLINT | 16 ビット符号付き整数。 | |||
INT2 | SMALLINT | 16 ビット符号付き整数。 | |||
BIGINT (エイリアス: INT8) | BIGINT | 64 ビット符号付き整数。 | |||
BYTEA | BINARY | バイナリデータ型。現在の長さ制限は 8 MB です。Hologres の | |||
REAL (エイリアス: FLOAT4) | FLOAT | 32 ビットバイナリ浮動小数点型。 | |||
DOUBLE PRECISION (エイリアス: FLOAT8) | DOUBLE | 64 ビットバイナリ浮動小数点型。 | |||
BOOLEAN (エイリアス: BOOL) | BOOLEAN | BOOLEAN 型。 | |||
TIMESTAMP | TIMESTAMP_NTZ | ストレージ精度はナノ秒です。タイムゾーンエラーが発生する可能性があります。 Hologres の TIMESTAMP 型はタイムゾーンを含まず、ストレージ精度はマイクロ秒です。 | |||
TIMESTAMP WITH TIME ZONE (エイリアス: TIMESTAMPTZ) | TIMESTAMP | ナノ秒精度のタイムスタンプ型。形式は MaxCompute と Hologres は基盤レイヤーで精度変換を実行します。MaxCompute はタイムゾーンを含まない形式でデータを出力します。 | |||
DECIMAL (エイリアス: NUMERIC) | DECIMAL(precision,scale) | 10 進数正確数値データ型。
MaxCompute で DECIMAL 型の精度を指定しない場合、デフォルト値は | |||
CHAR(n) | CHAR(n) | MaxCompute の Hologres の | |||
VARCHAR(n) | VARCHAR(n) | MaxCompute の Hologres の | |||
DATE | DATE | 日付型。形式は | |||
INT4[] | ARRAY<INT> | 複合型 ARRAY。 | |||
INT8[] | ARRAY<BIGINT> | ||||
FLOAT4[] | ARRAY<FLOAT> | ||||
FLOAT8[] | ARRAY<DOUBLE> | ||||
BOOLEAN[] | ARRAY<BOOLEAN> | ||||
TEXT[] | ARRAY<STRING> | ||||
JSONB | JSON | 複合型 JSON。ダイレクトリードモードでサポートされています。 | |||
JSON | STRING | 文字列型。現在の長さ制限は 8 MB です。Hologres の JSON 型は JDBC モードでサポートされています。 | |||
SERIAL (自動増分シーケンス) | INT | Hologres の SERIAL 自動増分フィールドの場合、MaxCompute で INT 型を使用してデータを受信できます。ただし、データ書き込み時の自動増分機能は利用できません。 | |||
RoaringBitmap | 未サポート | MaxCompute には対応するデータ型がありません。 | |||
RoaringBitmap64 | 未サポート | MaxCompute には対応するデータ型がありません。 | |||
BIT(n) | 未サポート | MaxCompute には対応するデータ型がありません。 | |||
VARBIT(n) | 未サポート | MaxCompute には対応するデータ型がありません。 | |||
INTERVAL | 未サポート | MaxCompute には対応するデータ型がありません。 | |||
TIMETZ | 未サポート | MaxCompute には対応するデータ型がありません。 | |||
TIME | 未サポート | MaxCompute には対応するデータ型がありません。 | |||
INET | 未サポート | MaxCompute には対応するデータ型がありません。 | |||
MONEY | 未サポート | MaxCompute には対応するデータ型がありません。 | |||
OID | 未サポート | MaxCompute には対応するデータ型がありません。 | |||
UUID | 未サポート | MaxCompute には対応するデータ型がありません。 |
よくある質問
MaxCompute を使用して Hologres から直接データを読み取る際に「ODPS-0130071」エラーが発生した場合はどうすればよいですか?
問題
Hologres から直接データを読み取る際に、エラー
ODPS-0130071 Failed to split to equal size...max count: 7777が発生します。例:ODPS-0130071:[0,0] Semantic analysis exception - physical plan generation failed: storage/table/src/input_splits_builder.cpp(195): StorageException: Failed to split to equal size, total size: 2143570729934, min size: 268435456, max size: 272629760, max count: 7777, split size: 275629513, split count: 7777原因
MaxCompute が Hologres から直接データを読み取る際、デフォルトのマッパー分割ポリシー (入力データ量 / split.size = 256 MB) を使用します。これにより、タスクによって生成される同時実行マッパーの数が最大制限の 7,777 を超えることがあります。
説明この制限は、過剰なマッパーを生成するタスクの送信を防止し、Hologres ファイルまたはネットワーク接続の安定性に影響を与えることを防ぎます。
解決策
以下のパラメーターを設定することでエラーを解決できます。
SET odps.external.holo.mapper.instances=10000; -- 同時実行の上限を増やします。最大値は 10,000 です。 SET odps.sql.mapper.split.size=512; -- タスクの同時実行度を調整します。最大値は 512 MB です。
Hologres 外部テーブルで実行される SQL ジョブの実行が遅い場合はどうすればよいですか?
SDK を使用して MaxCompute 外部テーブルからデータを検索するのが遅いです。
問題
SDK を使用して MaxCompute 外部テーブルからデータを検索するのが遅いです。
解決策
外部テーブルは全表スキャンのみをサポートしており、速度が遅いです。代わりに MaxCompute 内部テーブルを使用してください。
Hologres でキーワードを列名として使用した場合にエラーが発生した場合はどうすればよいですか?
問題
Hologres で特別な構成をせずにキーワードを列名として使用すると、以下のエラーが発生します。
ODPS-0123131:User defined function exception - SQLException in nextKeyValueCaused by: org.postgresql.util.PSQLException: ERROR: syntax error at or near ","解決策
odps.federation.jdbc.colmappingパラメーターを追加して、Hologres ソーステーブルのフィールドを Hologres 外部テーブルのフィールドにマッピングします。たとえば、Hologres ソーステーブルにキーワードフィールド
"offset"が含まれている場合、Hologres 外部テーブルを作成する際に'odps.federation.jdbc.colmapping'='offset:"offset"'パラメーターを追加します。
参考文献
Hologres 外部テーブルに関する一般的な問題の詳細については、「データレイクハウスおよび外部テーブルに関する一般的な問題」をご参照ください。

