すべてのプロダクト
Search
ドキュメントセンター

E-MapReduce:Kudu コネクタ

最終更新日:Jul 18, 2026

Kudu コネクタを使用すると、Apache Kudu テーブルに格納されたデータのクエリ、挿入、および削除が可能です。

背景情報

前提条件

Trino クラスターおよび Kudu サービスを備えた Hadoop クラスターが作成されています。詳細については、「クラスターを作成する」をご参照ください。

制限事項

  • Kudu 1.10 以降。

  • Trino クラスターと Hadoop クラスター間のネットワーク接続性。

  • Kudu テーブル名および列名は小文字で指定する必要があります。

Kudu コネクタの構成を変更する

詳細については、「コネクタの構成」をご参照ください。

E-MapReduce (EMR) コンソールで、Trino サービスの Configure ページに移動します。Service Configuration エリアで、kudu.properties タブをクリックします。

パラメーター

説明

kudu.client.master-addresses

Kudu マスターアドレスのカンマ区切りリスト。

サポートされる形式:example.com、example.com:7051、192.0.2.1、192.0.2.1:7051、[2001:db8::1]、[2001:db8::1]:7051、2001:db8::1。

デフォルト値:localhost。

説明

Kudu テーブルへのデータ書き込みおよびデータクエリを行うには、デフォルト値を localhost から Kudu マスターノードの IP アドレスまたはホスト名(例:master-1-1)に変更してください。

kudu.schema-emulation.enabled

スキーマエミュレーションを有効にするかどうかを指定します。

  • false(デフォルト):スキーマエミュレーションは無効です。

  • true:スキーマエミュレーションは有効です。

重要

この項目を追加するには、kudu.properties タブで Add Configuration Item をクリックします。手順については、「設定項目の追加」をご参照ください。

kudu.schema-emulation.prefix

スキーマエミュレーションのプレフィックス。

重要

この設定項目は、kudu.schema-emulation.enabled=true の場合に必須です。

標準のプレフィックスは 'presto::` です。空のプレフィックスもサポートされています。

kudu.client.default-admin-operation-timeout

テーブル作成やテーブル削除などの管理操作のデフォルトタイムアウト。

デフォルト値:30s。

kudu.client.default-operation-timeout

ユーザー操作のデフォルトタイムアウト。

デフォルト値:30s。

kudu.client.default-socket-read-timeout

ソケットからのデータ受信待ちのデフォルトタイムアウト。

デフォルト値:10s。

kudu.client.disable-statistics

Kudu クライアントの統計情報収集を無効にするかどうかを指定します。

  • false(デフォルト):統計情報収集は有効です。

  • true:統計情報収集は無効です。

データのクエリ

Apache Kudu はネイティブでスキーマをサポートしていません。ただし、Kudu コネクタを構成してスキーマをエミュレートできます。

スキーマエミュレーション無効(デフォルト)

デフォルトでは、スキーマエミュレーションは無効です。この場合、すべての Kudu テーブルは default スキーマに配置されます。

たとえば、orders テーブルをクエリするには、SELECT * FROM kudu.default.orders を実行します。カタログおよびスキーマがそれぞれ kudu および default に設定されている場合は、クエリを SELECT * FROM orders と簡略化できます。

Kudu テーブル名には任意の文字を使用できます。名前に特殊文字が含まれる場合は、二重引用符(")で囲む必要があります。たとえば、special.table! テーブルをクエリするには、SELECT * FROM kudu.default."special.table!" を実行します。

例:

  1. default スキーマに users テーブルを作成します。

    CREATE TABLE kudu.default.users (
      user_id int WITH (primary_key = true),
      first_name varchar,
      last_name varchar
    ) WITH (
      partition_by_hash_columns = ARRAY['user_id'],
      partition_by_hash_buckets = 2
    );
    説明

    テーブル作成時には、プライマリキー、列エンコードおよび圧縮形式、ハッシュまたはレンジパーティションなどの必須情報を指定する必要があります。

  2. テーブル情報を表示します。

    DESCRIBE kudu.default.users;

    コマンドの出力例は次のとおりです。

       Column   |  Type   |                      Extra                      | Comment
    ------------+---------+-------------------------------------------------+---------
     user_id    | integer | primary_key, encoding=auto, compression=default |
     first_name | varchar | nullable, encoding=auto, compression=default    |
     last_name  | varchar | nullable, encoding=auto, compression=default    |
    (3 rows)
  3. データを挿入します。

    INSERT INTO kudu.default.users VALUES (1, 'Donald', 'Duck'), (2, 'Mickey', 'Mouse');
  4. データをクエリします。

    SELECT * FROM kudu.default.users;

スキーマエミュレーション有効

コネクタの設定ファイル(etc/catalog/kudu.properties)でスキーマエミュレーションを有効にすると、命名規則に基づいてテーブルがスキーマにマッピングされます。

  • kudu.schema-emulation.enabled=true かつ kudu.schema-emulation.prefix= を設定した場合、テーブルは次のようにマッピングされます。

    Kudu テーブル名

    Presto テーブル名

    orders

    kudu.default.orders

    part1.part2

    kudu.part1.part2

    x.y.z

    kudu.x."y.z"

    説明

    Kudu はネイティブでスキーマをサポートしていないため、Presto はスキーマを管理するために $schemas という特別なテーブルを作成します。

  • kudu.schema-emulation.enabled=true かつ kudu.schema-emulation.prefix=presto:: を設定した場合、テーブルは次のようにマッピングされます。

    Kudu テーブル名

    Presto テーブル名

    orders

    kudu.default.orders

    part1.part2

    kudu.default."part1.part2"

    x.y.z

    kudu.default."x.y.z"

    presto::part1.part2

    kudu.part1.part2

    presto::x.y.z

    kudu.x."y.z"

    説明

    Kudu はネイティブでスキーマをサポートしていないため、Presto はスキーマを管理するために presto::$schemas という特別なテーブルを作成します。

データ型マッピング

以下の表は、Presto と Kudu 間のデータ型マッピングを示しています。

Presto 型

Kudu 型

備考

BOOLEAN

BOOL

該当なし

TINYINT

INT8

SMALLINT

INT16

INTEGER

INT32

BIGINT

INT64

REAL

FLOAT

DOUBLE

DOUBLE

VARCHAR

STRING

CREATE TABLE ... AS ... 文で Presto テーブルから Kudu テーブルを作成する場合、VARCHAR 型のオプションである最大長は保持されません。

VARBINARY

BINARY

TIMESTAMP

UNIXTIME_MICROS

このマッピングにより、Kudu 列の精度がマイクロ秒(µs)からミリ秒(ms)に低下します。

DECIMAL

DECIMAL

Kudu 1.7.0 以降でのみサポートされます。

DATE

該当なし

サポートされていません。

CREATE TABLE ... AS ... 文で Presto テーブルから Kudu テーブルを作成する場合、DATE 列は STRING 型に変換されます。

CHAR

該当なし

サポートされていません。

TIME

JSON

TIME WITH TIME ZONE

TIMESTAMP WITH TIME ZONE

INTERVAL YEAR TO MONTH

INTERVAL DAY TO SECOND

ARRAY

MAP

IPADDRESS

サポートされる Presto SQL ステートメント

説明

ALTER SCHEMA ... RENAME TO ... ステートメントはサポートされていません。

ステートメント

説明

SELECT

なし。

INSERT INTO ... VALUES

なし。

INSERT INTO ... SELECT ...

なし。

DELETE

なし。

DROP SCHEMA

スキーマエミュレーションが有効な場合のみ利用可能です。

CREATE SCHEMA

スキーマエミュレーションが有効な場合のみ利用可能です。

CREATE TABLE

テーブルを作成します。詳細については、「テーブルの作成」をご参照ください。

CREATE TABLE ... AS

なし。

DROP TABLE

なし。

ALTER TABLE ... RENAME TO ...

なし。

ALTER TABLE ... ADD COLUMN ...

列を追加します。詳細については、「列の追加」をご参照ください。

ALTER TABLE ... RENAME COLUMN ...

これらのステートメントは、プライマリキーの一部ではない列にのみ適用されます。

ALTER TABLE ... DROP COLUMN ...

SHOW SCHEMAS

なし。

SHOW TABLES

なし。

SHOW CREATE TABLE

なし。

SHOW COLUMNS FROM

なし。

DESCRIBE

このステートメントは SHOW COLUMNS FROM と同等です。

CALL kudu.system.add_range_partition

レンジパーティションを追加します。詳細については、「レンジパーティション」をご参照ください。

CALL kudu.system.drop_range_partition

レンジパーティションを削除します。詳細については、「レンジパーティション」をご参照ください。

テーブルの作成

テーブルを作成するには、列、データ型、およびパーティション情報を指定します。また、列エンコード形式や圧縮形式などの詳細も指定できます。以下に例を示します。

CREATE TABLE user_events (
  user_id int WITH (primary_key = true),
  event_name varchar WITH (primary_key = true),
  message varchar,
  details varchar WITH (nullable = true, encoding = 'plain')
) WITH (
  partition_by_hash_columns = ARRAY['user_id'],
  partition_by_hash_buckets = 5,
  number_of_replicas = 3
);

この例では、プライマリキーは user_id 列および event_name 列で構成されています。user_id 列のハッシュ値に基づいて、テーブルは 5 つのパーティションに分割されています。number_of_replicas は 3 に設定されています。

テーブル作成時に注意すべき点は以下のとおりです。

  • プライマリキー列は先頭に記述する必要があります。パーティションキー列はプライマリキー列のサブセットである必要があります。

  • number_of_replicas:タブレットレプリカの数。奇数である必要があります。指定しない場合、Kudu Master の構成からデフォルト値が使用されます。

  • Kudu はハッシュパーティションおよびレンジパーティションをサポートしています。ハッシュパーティションはハッシュ値に基づいて行をバケットに分散させます。レンジパーティションは順序付きのレンジパーティションキーに基づいて行を分散させ、その具体的な範囲は明示的に作成する必要があります。Kudu はマルチレベルパーティショニングをサポートしています。テーブルには少なくとも 1 つのハッシュパーティションまたはレンジパーティションが必要です。複数のハッシュパーティションを設定できますが、レンジパーティションは最大で 1 つまでです。

列プロパティ

列名およびデータ型に加えて、以下の列プロパティを指定できます。

パラメーター

説明

primary_key

BOOLEAN

true の場合、この列はプライマリキーの一部になります。

Kudu のプライマリキーは一意性制約を強制します。既存のプライマリキーと同じプライマリキーを持つ行を挿入すると、既存の行が更新されます。詳細については、「プライマリキー設計」をご参照ください。

nullable

BOOLEAN

true の場合、列に null 値を許可します。

重要

プライマリキー列には null 値を設定できません。

encoding

VARCHAR

列のエンコード形式。ストレージを削減し、クエリパフォーマンスを向上させます。

指定しない場合、Kudu は列のデータ型に基づいて自動的にエンコード形式を選択します。有効な値:auto、plain、bitshuffle、runlength、prefix、dictionary、group_varint。詳細については、「列エンコーディング」をご参照ください。

compression

VARCHAR

列の圧縮形式。

指定しない場合、Kudu はデフォルトの圧縮形式を使用します。有効な値:defaultnolz4snappyzlib。詳細については、「列圧縮」をご参照ください。

以下に例を示します。

CREATE TABLE mytable (
  name varchar WITH (primary_key = true, encoding = 'dictionary', compression = 'snappy'),
  index bigint WITH (nullable = true, encoding = 'runlength', compression = 'lz4'),
  comment varchar WITH (nullable = true, encoding = 'plain', compression = 'default'),
   ...
) WITH (...);

パーティション設計

このセクションでは、ハッシュパーティションおよびレンジパーティションの定義方法について説明します。

  • ハッシュパーティション

    • 1 つのパーティショングループの定義

      partition_by_hash_columns および partition_by_hash_buckets テーブルプロパティを使用して、パーティションキー列およびパーティション数をそれぞれ指定します。すべてのパーティションキー列はプライマリキー列のサブセットである必要があります。以下に例を示します。

      CREATE TABLE mytable (
        col1 varchar WITH (primary_key=true),
        col2 varchar WITH (primary_key=true),
        ...
      ) WITH (
        partition_by_hash_columns = ARRAY['col1', 'col2'],
        partition_by_hash_buckets = 4
      )
      説明

      この例では、col1 列および col2 列に対してハッシュパーティションを定義し、データを 4 つのパーティションに分散させています。

    • 2 つのパーティショングループの定義

      2 つの独立したハッシュパーティショングループを定義するには、partition_by_second_hash_columns および partition_by_second_hash_buckets テーブルプロパティも指定する必要があります。以下に例を示します。

      CREATE TABLE mytable (
        col1 varchar WITH (primary_key=true),
        col2 varchar WITH (primary_key=true),
        ...
      ) WITH (
        partition_by_hash_columns = ARRAY['col1'],
        partition_by_hash_buckets = 2,
        partition_by_second_hash_columns = ARRAY['col2'],
        partition_by_second_hash_buckets = 3
      )
      説明

      この例では、2 つのハッシュパーティショングループを定義しています。最初のグループは col1 列に基づいて行を 2 つのパーティションに分散させます。2 番目のグループは col2 列に基づいて行を 3 つのパーティションに分散させます。テーブルのパーティション総数は 6(2 × 3)になります。

  • レンジパーティション

    Kudu テーブルには最大で 1 つのレンジパーティションを設定でき、partition_by_range_columns テーブルプロパティを使用して定義します。テーブル作成時に range_partitions テーブルプロパティを使用してパーティション範囲を定義できます。既存のテーブルに対するレンジパーティションの管理には、kudu.system.add_range_partition および kudu.system.drop_range_partition ストアドプロシージャを使用します。以下に例を示します。

    CREATE TABLE events (
      rack varchar WITH (primary_key=true),
      machine varchar WITH (primary_key=true),
      event_time timestamp WITH (primary_key=true),
      ...
    ) WITH (
      partition_by_hash_columns = ARRAY['rack'],
      partition_by_hash_buckets = 2,
      partition_by_second_hash_columns = ARRAY['machine'],
      partition_by_second_hash_buckets = 3,
      partition_by_range_columns = ARRAY['event_time'],
      range_partitions = '[{"lower": null, "upper": "2018-01-01T00:00:00"},
                           {"lower": "2018-01-01T00:00:00", "upper": null}]'
    )
    説明

    この例では、2 つのハッシュパーティショングループと event_time 列に対する 1 つのレンジパーティションを持つテーブルを定義しています。範囲はタイムスタンプ 2018-01-01T00:00:00 で分割されています。

  • レンジパーティションの管理

    以下の例は、パーティション操作を示しています。

    • レンジパーティションの追加

      CALL kudu.system.add_range_partition(<YOUR_SCHEMA_NAME>, <YOUR_TABLE_NAME>, <range_partition_as_json_string>)
    • レンジパーティションの削除

      CALL kudu.system.drop_range_partition(<YOUR_SCHEMA_NAME>, <YOUR_TABLE_NAME>, <range_partition_as_json_string>)

    パラメーター

    説明

    <YOUR_SCHEMA_NAME>

    テーブルが配置されているスキーマ。

    <YOUR_TABLE_NAME>

    テーブル名。

    <range_partition_as_json_string>

    レンジパーティションの上限および下限を JSON 文字列として指定します。形式は '{"lower": <value>, "upper": <value>}' です。パーティションに複数の列がある場合は、形式は '{"lower": [<value_col1>,...], "upper": [<value_col1>,...]}' です。値の形式は列のデータ型によって異なります。以下のリストは、データ型と必要な JSON 文字列形式の対応関係を示しています。

    • BIGINT: '{"lower": 0, "upper": 1000000}'

    • SMALLINT: '{"lower": 10, "upper": null}'

    • VARCHAR: '{"lower": "A", "upper": "M"}'

    • TIMESTAMP: '{"lower": "2018-02-01T00:00:00.000", "upper": "2018-02-01T12:00:00.000"}'

    • BOOLEAN: '{"lower": false, "upper": true}'

    • VARBINARY: Base64 エンコードされた文字列。

    説明

    null 値は、境界が無限であることを示します。

    以下に例を示します。

    CALL kudu.system.add_range_partition('myschema', 'events', '{"lower": "2018-01-01", "upper": "2018-06-01"}')
    説明

    この例では、myschema スキーマ内の events テーブルにレンジパーティションを追加しています。パーティションの下限は 2018-01-01(タイムスタンプ 2018-01-01T00:00:00.000 に対応)で、上限は 2018-06-01 です。

    既存のレンジパーティションを確認するには、SHOW CREATE TABLE ステートメントを使用します。この情報は range_partitions テーブルプロパティに表示されます。

列の追加

ALTER TABLE ... ADD COLUMN ... ステートメントを使用して、既存のテーブルに列を追加します。新しい列に対して列プロパティを指定することもできます。列プロパティの詳細については、「テーブルの作成」をご参照ください。

ALTER TABLE mytable ADD COLUMN extraInfo varchar WITH (nullable = true, encoding = 'plain')