Hologres V3.0.38 以降、Common Table と呼ばれる MaxCompute 向けのアップグレードされた高速アクセスパスが導入されました。このトピックでは、Common Table を使用して MaxCompute データにアクセスする方法について説明します。
概要
Common Table は、C++ ネイティブリーダーを使用して MaxCompute からデータを読み取ります。SQE/HQE アクセスパスと比較して、Common Table には次の利点があります。
は「サポートされていること」を、は「サポートされていないこと」を示します。
機能 | SQE/HQE | Common Table |
パフォーマンス | 高 | 非常に高い。パフォーマンスは SQE/HQE よりも 33% 高く、オープンストレージ API よりも 200% 以上高くなります。 |
動的データマスキング | マスキングルールを別途設定する必要があります。 | MaxCompute からデータマスキングルールを継承し、クエリ結果が MaxCompute の結果と一致することを保証します。 |
スキーマエボリューション | 。直接ファイル読み取りはサポートされていないため、パフォーマンスがわずかに低下します。 | 。直接ファイル読み取りをサポートし、高いパフォーマンスを実現します。 |
保存時の暗号化 |
|
|
ACID 1.0 テーブル | ||
PK Delta Table | ||
Append Delta Table |
権限
Common Table を使用して MaxCompute 外部テーブルにアクセスするには、必要な権限が必要です。ユーザーに MaxCompute プロジェクトとそのテーブルへのアクセス権限を付与する方法については、「コマンドを使用したユーザー権限の管理」をご参照ください。
MaxCompute のクエリ権限とより整合性を取るため、Hologres V4.0 以降では更新された権限検証プロセスが使用されます。
作成方法
アクション
権限 (Hologres V3.0、V3.1、V3.2)
権限 (Hologres V4.0 以降)
外部テーブル
IMPORT FOREIGN SCHEMA を使用した MaxCompute 外部テーブルの一括作成
Describe、List
Describe、List
データのクエリ
Describe、Select
Select
外部データベース
外部テーブルのメタデータの表示
Describe
Describe
データのクエリ
Describe、Select
Select
Hologres は、MaxCompute Delta Table の最新のスナップショットの読み取りのみをサポートします。
Hologres から MaxCompute Delta Table へのデータ書き込みはサポートされていません。
アクセスパスに関係なく、行レベルセキュリティが有効になっている MaxCompute テーブルをクエリすることはできません。
機能の更新
説明 | サポートされるバージョン |
MaxCompute クエリのデータ読み取りノードへの述語プッシュダウンをサポートします。 | >=4.1.6 |
MaxCompute からの JSON データ型の読み取りをサポートします。 | >=4.1.1 |
MaxCompute Append Delta テーブルのクエリをサポートします。 | >= 3.0.40 >= 3.1.10 >=3.2.0 >=4.0.0 |
MaxCompute Delta Table のクエリで `spillRead` を使用して、スピルされていないファイルが多すぎることによって発生するエラーを解決することをサポートします。 | >= 3.0.41 >= 3.1.10 >= 3.2.0 >= 4.0.0 |
デフォルト値を含む MaxCompute テーブルの読み取りをサポートします。 | >=3.0.40 >= 3.1.10 >=3.2.0 >=4.0.0 |
インスタンス仕様に基づいてスプリットサイズを自動的に決定する Auto Split Size をサポートします。 | >=3.1.33 >=3.2.0 >=4.0.0 |
TIMESTAMP_NTZ 型のデータのクエリをサポートします。 | >= 3.0.41 >= 3.1.10 >=3.2.0 >=4.0.0 |
Delta Table のクラスタリングキーやプライマリキーなどの属性に対する等価フィルターの述語プッシュダウンをサポートします。この機能により、フィルター効率とクエリパフォーマンスが向上します。 | >= 4.0.6 |
Common Table の有効化
ユースケースに応じて、セッションレベル、データベースレベル、またはインスタンスレベルで Common Table を有効にできます。
セッションレベル
-- セッションレベルで Common Table を有効にします。このコマンドは、クエリまたは DML 文と一緒に実行する必要があります。 SET hg_experimental_external_catalog_routing = 'odps:common_table,dlf:hqe';データベースレベル
-- データベースレベルで Common Table を有効にします。 ALTER DATABASE <database name> SET hg_experimental_external_catalog_routing = 'odps:common_table,dlf:hqe';インスタンスレベル
-- インスタンスレベルで Common Table を有効にします。 ALTER ROLE ALL SET hg_experimental_external_catalog_routing = 'odps:common_table,dlf:hqe';
Common Table の無効化
セッションレベル
-- セッションレベルで Common Table を無効にします。このコマンドは、クエリまたは DML 文と一緒に実行する必要があります。 SET hg_experimental_external_catalog_routing = 'odps:holo_native,dlf:hqe';データベースレベル
-- データベースレベルで Common Table を無効にします。 ALTER DATABASE <database name> SET hg_experimental_external_catalog_routing = 'odps:holo_native,dlf:hqe';インスタンスレベル
-- インスタンスレベルで Common Table を無効にします。 ALTER ROLE ALL SET hg_experimental_external_catalog_routing = 'odps:holo_native,dlf:hqe';
現在のアクセスパスの確認
次の SQL を使用して確認できます。出力が
odps:common_table,dlf:hqeの場合、Common Table を使用していることを示します。SHOW hg_experimental_external_catalog_routing;過去のクエリについては、スロークエリログの `query_extinfo` フィールドを確認できます。
driver:CommonTableが存在する場合、Common Table リンクが使用されたことを示します。
Auto Split Size
Auto Split Size パラメーターは、デフォルトで off に設定されており、機能が無効であることを意味します。実際のシナリオに基づいて、必要に応じて有効または無効にできます。このパラメーターは、次のように設定できます。
Auto Split Size の有効化
V4.0 以降
セッションレベル
-- セッションレベルで Auto Split Size を有効にします。 SET hg_experimental_enable_maxcompute_sdk_auto_split_size = 'on';データベースレベル
-- データベースレベルで Auto Split Size を有効にします。 ALTER DATABASE <database name> SET hg_experimental_enable_maxcompute_sdk_auto_split_size = 'on';インスタンスレベル
-- インスタンスレベルで Auto Split Size を有効にします。 ALTER ROLE ALL SET hg_experimental_enable_maxcompute_sdk_auto_split_size = 'on';
V4.0 より前のバージョン
セッションレベル
-- セッションレベルで Auto Split Size を有効にします。 SET hg_experimental_enable_common_table_auto_split_size = 'on';データベースレベル
-- データベースレベルで Auto Split Size を有効にします。 ALTER DATABASE <database name> SET hg_experimental_enable_common_table_auto_split_size = 'on';インスタンスレベル
-- インスタンスレベルで Auto Split Size を有効にします。 ALTER ROLE ALL SET hg_experimental_enable_common_table_auto_split_size = 'on';
Auto Split Size の無効化
V4.0 以降
セッションレベル
-- セッションレベルで Auto Split Size を無効にします。 SET hg_experimental_enable_maxcompute_sdk_auto_split_size = 'off';データベースレベル
-- データベースレベルで Auto Split Size を無効にします。 ALTER DATABASE <database name> SET hg_experimental_enable_maxcompute_sdk_auto_split_size = 'off';インスタンスレベル
-- インスタンスレベルで Auto Split Size を無効にします。 ALTER ROLE ALL SET hg_experimental_enable_maxcompute_sdk_auto_split_size = 'off';
V4.0 より前のバージョン
セッションレベル
-- セッションレベルで Auto Split Size を無効にします。 SET hg_experimental_enable_common_table_auto_split_size = 'off';データベースレベル
-- データベースレベルで Auto Split Size を無効にします。 ALTER DATABASE <database name> SET hg_experimental_enable_common_table_auto_split_size = 'off';インスタンスレベル
-- インスタンスレベルで Auto Split Size を無効にします。 ALTER ROLE ALL SET hg_experimental_enable_common_table_auto_split_size = 'off';
データ読み取りノードへのフィルタープッシュダウンの有効化
Hologres V4.1.6 では、データ読み取りノードへのフィルタープッシュダウンがサポートされるようになりました。この機能は、高フィルターレートのシナリオでパフォーマンスを大幅に向上させます。この機能は、Hologres V4.1 バージョンではデフォルトで無効になっています。次の SQL 文を実行して、グローバルに有効にします。
SELECT hg_admin_command('set_global_flag','common_table_enable_orc_selective_column_reader=true');データ読み取りノードへのフィルタープッシュダウンの無効化
Hologres V4.1.6 以降のバージョンでは、データ読み取りノードへのフィルタープッシュダウンがサポートされています。この機能は、高フィルターレートのシナリオでパフォーマンスを大幅に向上させます。次の SQL 文を実行して、この機能をグローバルに無効にします。この機能は、Hologres V4.1 ではデフォルトで無効になっています。
SELECT hg_admin_command('set_global_flag','common_table_enable_orc_selective_column_reader=false');