このトピックでは、MaxCompute で Lindorm 外部テーブルを作成し、Lindorm データソースをマッピングする方法について説明します。
はじめに
Lindorm は、モノのインターネット (IoT) 、インターネット、車のインターネットなどのシナリオ向けに設計および最適化されたクラウドネイティブマルチモデルデータベースです。ワイドテーブル、時系列、テキスト、オブジェクト、ストリーム、空間データなど、多様なデータ型への統一アクセスと統合処理をサポートします。Lindorm は、SQL、HBase/Cassandra/S3、TSDB、HDFS、Solr、Kafka などの複数の標準インターフェイスと互換性があり、Alibaba の主要サービスをサポートするコアデータベースの 1 つです。
MaxCompute と Lindorm 間のネットワーク接続を確立した後、外部テーブルを作成して Lindorm テーブルにマッピングできます。これにより、次の操作を実行できます。
-
Lindorm テーブルから MaxCompute にデータを同期し、後続の ETL 処理を実行する。
-
他の Lindorm テーブルと結合してフェデレーテッドクエリを実行する。
-
MaxCompute から Lindorm テーブルにデータを書き込む。
制限事項
-
リージョンの可用性:この機能は、次のリージョンでのみ利用可能です:中国 (北京) 、中国 (上海) 、中国 (張家口) 、中国 (杭州) 、中国 (深セン) 、中国 (香港) 、中国 (上海) 金融クラウドゾーン F、日本 (東京) 、シンガポール、マレーシア (クアラルンプール) 、インドネシア (ジャカルタ) 、ドイツ (フランクフルト) 、米国 (シリコンバレー) 、および米国 (バージニア) 。
-
Lindorm 外部テーブルはクラスタープロパティをサポートしていません。
注意事項
ソースの Lindorm テーブルからデータを読み取る際、列数の不一致は次のように処理されます:ソーステーブルの列数が外部テーブルの DDL で定義された数より少ない場合、不足している列には NULL 値が入力されます。逆に、ソーステーブルの列数が多い場合、余分な列データは破棄されます。
Lindorm 外部テーブルの作成
構文
Lindorm 外部テーブルを作成する際には、DDL 文で HBaseStorageHandler を指定し、Lindorm インスタンスの構成詳細を提供する必要があります。
テーブル名と列名では大文字と小文字が区別されません。大文字と小文字の強制変換はサポートされていません。構文は次のとおりです。
-- Hive 互換モードを有効にします。
SET odps.sql.hive.compatible = true;
-- HBase バージョンを lindorm に設定します。
SET odps.sql.hbase.version=lindorm;
-- Lindorm 外部テーブルを作成します。
CREATE EXTERNAL TABLE if NOT EXISTS <mc_lindorm_external>
(
<col_name1> <data_type>,
<col_name2> <data_type>,
......
)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' -- Lindorm データソースのハンドラ。
WITH SERDEPROPERTIES(
'hbase.columns.mapping'='<:key,col-family:col-name1,col-family:col-name2,...>')
TBLPROPERTIES(
-- hbase.table.name と hbase.zookeeper.quorum パラメーターは必須です。
'hbase.table.name'='',
'hbase.zookeeper.quorum'='',
-- hbase.client.username と hbase.client.password パラメーターを構成します。
'hbase.client.username'='****','hbase.client.password'='****',
-- hbase.zookeeper.property.clientPort、mcfed.zookeeper.session.timeout、および hbase.client.retries.number パラメーターはオプションです。
-- hbase.zookeeper.property.clientPort のデフォルト値は 30020 です。
['hbase.zookeeper.property.clientPort'='{30020}',]
['mcfed.zookeeper.session.timeout'='{{VALUE}}',]
['hbase.client.retries.number'='{{VALUE}}',]
'networklink'='{{NETWORKLINK_NAME}}'
);
パラメーター
-
mc_lindorm_external:必須。作成する Lindorm 外部テーブルの名前。
-
col_name:必須。Lindorm 外部テーブルの列名。
-
data_type:必須。列のデータ型。
-
WITH SERDEPROPERTIES:
-
'hbase.columns.mapping'='<:key,col-family:col-name1,col-family:col-name2,...>':必須。Lindorm 外部テーブルとソースの Lindorm テーブルとの間の列マッピング。詳細については、「HBaseIntegration-ColumnMapping」をご参照ください。
-
行キー (
:key[,:key2,:keyn]) を最初に指定する必要があります。 -
列のフォーマットは
col-family:col-name1,col-family:col-name2です。1 つのジョブには 1 つの列ファミリーのみを含めることができます。
-
-
-
TBLPROPERTIES:
-
'hbase.table.name'='<namespace:lindorm_table_name>':必須。マッピングする Lindorm テーブルの名前空間と名前。名前空間を指定しない場合、`default` 名前空間が使用されます。このテーブルは、事前に Lindorm コンソールで作成しておく必要があります。
-
'hbase.zookeeper.quorum'='<VPC ip1|host1:port,VPC ip2|host2:port...>':必須。Lindorm インスタンスのワイドテーブルエンジンの ZooKeeper 接続文字列。この値は、Lindorm コンソールで Java API アクセス URL として利用できます。
-
hbase.client.username:必須。
-
hbase.client.password:必須。
-
'hbase.zookeeper.property.clientPort'='{2181|30020}':オプション。Lindorm の ZooKeeper ポート。デフォルト値は 30020 です。
-
'mcfed.zookeeper.session.timeout'='<value>':オプション。ZooKeeper のセッションタイムアウト期間 (ミリ秒単位) 。推奨値は 30000 です。
-
'hbase.client.retries.number'='<value>':オプション。接続リトライの最大回数。
-
'networklink'='<networklink_name>':必須。Lindorm インスタンスの VPC に接続するネットワークリンクの名前。
説明ZooKeeper 関連の構成には、
mcfed.zookeeperで始まるプロパティと、hbaseプレフィックスの下にあるいくつかのプロパティが含まれます。 -
例
-
Lindorm サービスを有効化し、Lindorm インスタンスを作成済みであること。
-
Lindorm Shell をダウンロードして設定済みであること。詳細については、「Lindorm Shell を使用したワイドテーブルエンジンへのアクセス」をご参照ください。
-
ネットワーク接続
-
VPC 接続ソリューションに基づいて、MaxCompute と Lindorm 間のネットワーク接続を確立済みであること。VPC 接続ソリューションの詳細については、「ネットワーク有効化プロセス」をご参照ください。
-
この接続では、MaxCompute は指定された VPC にのみアクセスできます。他の VPC やリージョンをまたいだリソースにアクセスするには、「VPC アクセス (専用回線経由の直接接続) 」の指示に従って、専用線接続ソリューションで指定された VPC と他の VPC との間の接続性を設定してください。
-
-
Lindorm Shell を使用して Lindorm テーブルを作成し、データを挿入します。
-
lindorm_testテーブルを作成します。CREATE 'lindorm_test','f'; -
lindorm_testテーブルにデータを挿入します。put 'lindorm_test', '1122', 'f:col1', 'hello'; put 'lindorm_test', '1122', 'f:col2', 'hbase'; -
lindorm_testテーブルからデータをクエリします。scan 'lindorm_test';次の結果が返されます。

-
-
MaxCompute 外部テーブルを作成し、Lindorm データソースにマッピングします。
-
MaxCompute クライアントで次のコマンドを実行して、
lindorm_test_extという名前の Lindorm 外部テーブルを作成します。SET odps.sql.hive.compatible = true; SET odps.sql.hbase.version=lindorm; CREATE EXTERNAL TABLE lindorm_test_ext ( row_key INT, col1 STRING, col2 STRING ) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ( 'hbase.columns.mapping'=':key,f:col1,f:col2') TBLPROPERTIES ( 'hbase.table.name'='lindorm_test', 'hbase.zookeeper.quorum'='ld-2z****-proxy-lindorm.lindorm.rds.aliyuncs.com:30020', 'hbase.client.username'='<ユーザー名>', 'hbase.client.password'='***', 'networklink'='<お使いのネットワークリンク名>'); -
外部テーブル
lindorm_test_extからデータをクエリします。SET odps.sql.hive.compatible = true; SET odps.sql.hbase.version=lindorm; SELECT * FROM lindorm_test_ext; -- 次の結果が返されます。 +------------+------------+----------+ | key | col1 | col2 | +------------+------------+----------+ | 1122 | hello | hbase | +------------+------------+----------+ -
外部テーブル
lindorm_test_extにデータを挿入します。SET odps.sql.hive.compatible = true; SET odps.sql.hbase.version = lindorm; INSERT OVERWRITE TABLE lindorm_test_ext SELECT '1123', 'lindorm', 'mftestinsert'; -
外部テーブル
lindorm_test_extから再度データをクエリします。SET odps.sql.hive.compatible = true; SET odps.sql.hbase.version=lindorm; SELECT * FROM lindorm_test_ext; -- 次の結果が返されます。 +------------+------------+-------------+ | key | col1 | col2 | +------------+------------+-------------+ | 1122 | hello | hbase | | 1123 | lindorm | mftestinsert| +------------+------------+-------------+ -
scan文を使用して Lindorm テーブルlindorm_testからデータをクエリします。scan 'lindorm_test';次の結果が返されます。

-