Kudu catalog
StarRocks は v3.3 以降で Kudu catalog をサポートしています。
Kudu catalog は、Apache Kudu からデータを取り込まずにクエリを実行できる外部カタログの一種です。
また、Kudu catalog を使用して INSERT INTO を利用することで、Kudu からデータを直接変換してロードすることができます。
Kudu クラスターで SQL ワークロードを成功させるためには、StarRocks クラスターが以下の重要なコンポーネントと統合する必要があります。
- Kudu ファイルシステムまたは Hive メタストアのようなメタストア
使用上の注意
Kudu catalog はデータのクエリにのみ使用できます。Kudu catalog を使用して、Kudu クラスター内のデータを削除、削除、または挿入することはできません。
統合準備
Kudu catalog を作成する前に、StarRocks クラスターが Kudu クラスターのストレージシステムとメタストアと統合できることを確認してください。
NOTE
クエリを送信した際に不明なホストを示すエラーが返された場合は、KUDU クラスターのノードのホスト名と IP アドレスのマッピングを /etc/hosts パスに追加する必要があります。
Kerberos 認証
KUDU クラスターまたは Hive メタストアで Kerberos 認証が有効になっている場合、StarRocks クラスターを次のように設定します。
- 各 FE と各 BE で kinit -kt keytab_path principalコマンドを実行して、Key Distribution Center (KDC) から Ticket Granting Ticket (TGT) を取得します。このコマンドを実行するには、KUDU クラスターと Hive メタストアにアクセスする権限が必要です。このコマンドを使用して KDC にアクセスすることは時間に敏感です。そのため、cron を使用してこのコマンドを定期的に実行する必要があります。
- 各 FE の $FE_HOME/conf/fe.conf ファイルと各 BE の $BE_HOME/conf/be.conf ファイルに JAVA_OPTS="-Djava.security.krb5.conf=/etc/krb5.conf"を追加します。この例では、/etc/krb5.confは krb5.conf ファイルの保存パスです。必要に応じてパスを変更できます。
Kudu catalog の作成
構文
CREATE EXTERNAL CATALOG <catalog_name>
[COMMENT <comment>]
PROPERTIES
(
    "type" = "kudu",
    CatalogParams
)
パラメータ
catalog_name
Kudu catalog の名前です。命名規則は以下の通りです。
- 名前には文字、数字 (0-9)、およびアンダースコア (_) を含めることができます。文字で始まる必要があります。
- 名前は大文字と小文字を区別し、1023 文字を超えることはできません。
comment
Kudu catalog の説明です。このパラメータはオプションです。
type
データソースのタイプです。値を kudu に設定します。
CatalogParams
StarRocks が Kudu クラスターのメタデータにアクセスする方法に関する一連のパラメータです。
次の表は、CatalogParams で設定する必要があるパラメータを説明しています。
| パラメータ | 必須 | 説明 | 
|---|---|---|
| kudu.catalog.type | はい | Kudu クラスターで使用するメタストアのタイプです。このパラメータを kuduまたはhiveに設定します。 | 
| kudu.master | いいえ | Kudu Master のアドレスを指定します。デフォルトは localhost:7051です。 | 
| hive.metastore.uris | いいえ | Hive メタストアの URI です。形式: thrift://<metastore_IP_address>:<metastore_port>。Hive メタストアで高可用性 (HA) が有効になっている場合、複数のメタストア URI を指定し、カンマ (,) で区切ることができます。例:"thrift://<metastore_IP_address_1>:<metastore_port_1>,thrift://<metastore_IP_address_2>:<metastore_port_2>,thrift://<metastore_IP_address_3>:<metastore_port_3>"。 | 
| kudu.schema-emulation.enabled | いいえ | schemaエミュレーションを有効または無効にするオプションです。デフォルトではオフ (false) になっており、すべてのテーブルはdefaultschemaに属します。 | 
| kudu.schema-emulation.prefix | いいえ | kudu.schema-emulation.enabled=trueの場合にのみ設定するschemaエミュレーションのプレフィックスです。デフォルトのプレフィックスは空文字列です: 。 | 
NOTE
Hive メタストアを使用する場合、Kudu データをクエリする前に、Hive メタストアノードのホスト名と IP アドレスのマッピングを
/etc/hostsパスに追加する必要があります。そうしないと、クエリを開始する際に StarRocks が Hive メタストアにアクセスできない可能性があります。
例
- 
次の例は、Kudu クラスターからデータをクエリするために、メタストアタイプ kudu.catalog.typeがkuduに設定されたkudu_catalogという名前の Kudu catalog を作成します。CREATE EXTERNAL CATALOG kudu_catalog
 PROPERTIES
 (
 "type" = "kudu",
 "kudu.master" = "localhost:7051",
 "kudu.catalog.type" = "kudu",
 "kudu.schema-emulation.enabled" = "true",
 "kudu.schema-emulation.prefix" = "impala::"
 );
- 
次の例は、Kudu クラスターからデータをクエリするために、メタストアタイプ kudu.catalog.typeがhiveに設定されたkudu_catalogという名前の Kudu catalog を作成します。CREATE EXTERNAL CATALOG kudu_catalog
 PROPERTIES
 (
 "type" = "kudu",
 "kudu.master" = "localhost:7051",
 "kudu.catalog.type" = "hive",
 "hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
 "kudu.schema-emulation.enabled" = "true",
 "kudu.schema-emulation.prefix" = "impala::"
 );
Kudu catalog の表示
現在の StarRocks クラスター内のすべての catalog をクエリするには、SHOW CATALOGS を使用します。
SHOW CATALOGS;
外部 catalog の作成ステートメントをクエリするには、SHOW CREATE CATALOG を使用します。次の例では、kudu_catalog という名前の Kudu catalog の作成ステートメントをクエリします。
SHOW CREATE CATALOG kudu_catalog;
Kudu catalog の削除
外部 catalog を削除するには、DROP CATALOG を使用します。
次の例では、kudu_catalog という名前の Kudu catalog を削除します。
DROP Catalog kudu_catalog;
Kudu テーブルのスキーマの表示
Kudu テーブルのスキーマを表示するには、次のいずれかの構文を使用します。
- 
スキーマの表示 DESC[RIBE] <catalog_name>.<database_name>.<table_name>;
- 
CREATE ステートメントからスキーマと場所の表示 SHOW CREATE TABLE <catalog_name>.<database_name>.<table_name>;
Kudu テーブルのクエリ
- 
Kudu クラスター内のデータベースを表示するには、SHOW DATABASES を使用します。 SHOW DATABASES FROM <catalog_name>;
- 
現在のセッションで目的の catalog に切り替えるには、SET CATALOG を使用します。 SET CATALOG <catalog_name>;次に、現在のセッションでアクティブなデータベースを指定するには、USE を使用します。 USE <db_name>;または、目的の catalog でアクティブなデータベースを直接指定するには、USE を使用します。 USE <catalog_name>.<db_name>;
- 
指定されたデータベース内の目的のテーブルをクエリするには、SELECT を使用します。 SELECT count(*) FROM <table_name> LIMIT 10;
Kudu からのデータのロード
OLAP テーブル olap_tbl があると仮定して、次のようにデータを変換してロードできます。
INSERT INTO default_catalog.olap_db.olap_tbl SELECT * FROM kudu_table;