メインコンテンツまでスキップ
バージョン: 3.1

外部テーブル

注記

v3.0以降、Hive、Iceberg、Hudiからデータをクエリするために、catalogを使用することを推奨します。Hive catalogIceberg catalogHudi catalogを参照してください。

v3.1以降、MySQLとPostgreSQLからデータをクエリするためにJDBC catalogを使用し、ElasticsearchからデータをクエリするためにElasticsearch catalogを使用することを推奨します。

外部テーブル機能は、StarRocksにデータをインポートするために設計されており、外部システムに対して通常の操作としてクエリを実行するためのものではありません。JOINのような関数を使用してクエリを実行することはできますが、パフォーマンスは良くありません。よりパフォーマンスの良い解決策は、データをStarRocksにインポートすることです。

StarRocksは、外部テーブルを使用して他のデータソースにアクセスすることをサポートしています。外部テーブルは、他のデータソースに保存されているデータテーブルに基づいて作成されます。StarRocksはデータテーブルのメタデータのみを保存します。外部テーブルを使用して、他のデータソースのデータを直接クエリすることができます。StarRocksは、MySQL、StarRocks、Elasticsearch、Apache Hive™、Apache Iceberg、Apache Hudiといったデータソースをサポートしています。現在、他のStarRocksクラスターから現在のStarRocksクラスターにデータを書き込むことしかできません。データを読み取ることはできません。StarRocks以外のデータソースからは、これらのデータソースからデータを読み取ることしかできません。

v2.5以降、StarRocksは外部データソースのホットデータクエリを加速するData Cache機能を提供しています。詳細はData Cacheを参照してください。

StarRocks外部テーブル

StarRocks 1.19以降、StarRocksは、あるStarRocksクラスターから別のクラスターにデータを書き込むためのStarRocks外部テーブルを使用することを許可しています。これにより、読み書きの分離が実現され、リソースの分離が向上します。まず、宛先StarRocksクラスターに宛先テーブルを作成します。次に、ソースStarRocksクラスターで、宛先テーブルと同じスキーマを持つStarRocks外部テーブルを作成し、PROPERTIESフィールドに宛先クラスターとテーブルの情報を指定します。

データは、INSERT INTOステートメントを使用してStarRocks外部テーブルに書き込むことで、ソースクラスターから宛先クラスターに書き込むことができます。これにより、以下の目標を実現できます:

  • StarRocksクラスター間のデータ同期。
  • 読み書きの分離。データはソースクラスターに書き込まれ、ソースクラスターからのデータ変更は宛先クラスターに同期され、クエリサービスを提供します。

以下のコードは、宛先テーブルと外部テーブルを作成する方法を示しています。

# 宛先StarRocksクラスターに宛先テーブルを作成します。
CREATE TABLE t
(
k1 DATE,
k2 INT,
k3 SMALLINT,
k4 VARCHAR(2048),
k5 DATETIME
)
ENGINE=olap
DISTRIBUTED BY HASH(k1);

# ソースStarRocksクラスターに外部テーブルを作成します。
CREATE EXTERNAL TABLE external_t
(
k1 DATE,
k2 INT,
k3 SMALLINT,
k4 VARCHAR(2048),
k5 DATETIME
)
ENGINE=olap
DISTRIBUTED BY HASH(k1)
PROPERTIES
(
"host" = "127.0.0.1",
"port" = "9020",
"user" = "user",
"password" = "passwd",
"database" = "db_test",
"table" = "t"
);

# ソースクラスターから宛先クラスターにデータを書き込むために、StarRocks外部テーブルにデータを書き込みます。2番目のステートメントは本番環境で推奨されます。
insert into external_t values ('2020-10-11', 1, 1, 'hello', '2020-10-11 10:00:00');
insert into external_t select * from other_table;

パラメータ:

  • EXTERNAL: このキーワードは、作成されるテーブルが外部テーブルであることを示します。

  • host: このパラメータは、宛先StarRocksクラスターのLeader FEノードのIPアドレスを指定します。

  • port: このパラメータは、宛先StarRocksクラスターのFEノードのRPCポートを指定します。

    注記

    StarRocks外部テーブルが属するソースクラスターが宛先StarRocksクラスターにアクセスできるようにするためには、ネットワークとファイアウォールを設定して、以下のポートへのアクセスを許可する必要があります:

    • FEノードのRPCポート。FE設定ファイルfe/fe.confrpc_portを参照してください。デフォルトのRPCポートは9020です。
    • BEノードのbRPCポート。BE設定ファイルbe/be.confbrpc_portを参照してください。デフォルトのbRPCポートは8060です。
  • user: このパラメータは、宛先StarRocksクラスターにアクセスするために使用されるユーザー名を指定します。

  • password: このパラメータは、宛先StarRocksクラスターにアクセスするために使用されるパスワードを指定します。

  • database: このパラメータは、宛先テーブルが属するデータベースを指定します。

  • table: このパラメータは、宛先テーブルの名前を指定します。

StarRocks外部テーブルを使用する際の制限事項:

  • StarRocks外部テーブルでは、INSERT INTOおよびSHOW CREATE TABLEコマンドのみを実行できます。他のデータ書き込み方法はサポートされていません。また、StarRocks外部テーブルからデータをクエリしたり、外部テーブルでDDL操作を実行することはできません。
  • 外部テーブルの作成構文は通常のテーブルの作成と同じですが、外部テーブルのカラム名やその他の情報は宛先テーブルと同じでなければなりません。
  • 外部テーブルは、宛先テーブルから10秒ごとにテーブルメタデータを同期します。宛先テーブルでDDL操作が行われた場合、2つのテーブル間のデータ同期に遅延が発生する可能性があります。

JDBC互換データベースの外部テーブル

v2.3.0以降、StarRocksはJDBC互換データベースをクエリするための外部テーブルを提供しています。これにより、データをStarRocksにインポートすることなく、これらのデータベースのデータを非常に高速に分析できます。このセクションでは、StarRocksで外部テーブルを作成し、JDBC互換データベースのデータをクエリする方法について説明します。

前提条件

JDBC外部テーブルを使用してデータをクエリする前に、FEsとBEsがJDBCドライバのダウンロードURLにアクセスできることを確認してください。ダウンロードURLは、JDBCリソースを作成するためのステートメント内のdriver_urlパラメータで指定されます。

JDBCリソースの作成と管理

JDBCリソースの作成

データベースからデータをクエリするための外部テーブルを作成する前に、StarRocksでJDBCリソースを作成してデータベースの接続情報を管理する必要があります。データベースはJDBCドライバをサポートしている必要があり、「ターゲットデータベース」と呼ばれます。リソースを作成した後、それを使用して外部テーブルを作成できます。

以下のステートメントを実行して、jdbc0という名前のJDBCリソースを作成します:

CREATE EXTERNAL RESOURCE jdbc0
PROPERTIES (
"type"="jdbc",
"user"="postgres",
"password"="changeme",
"jdbc_uri"="jdbc:postgresql://127.0.0.1:5432/jdbc_test",
"driver_url"="https://repo1.maven.org/maven2/org/postgresql/postgresql/42.3.3/postgresql-42.3.3.jar",
"driver_class"="org.postgresql.Driver"
);

PROPERTIESで必要なパラメータは次のとおりです:

  • type: リソースのタイプ。値をjdbcに設定します。

  • user: ターゲットデータベースに接続するために使用されるユーザー名。

  • password: ターゲットデータベースに接続するために使用されるパスワード。

  • jdbc_uri: JDBCドライバがターゲットデータベースに接続するために使用するURI。URI形式はデータベースURI構文を満たす必要があります。一般的なデータベースのURI構文については、OraclePostgreSQLSQL Serverの公式ウェブサイトを参照してください。

注: URIにはターゲットデータベースの名前を含める必要があります。前述のコード例では、jdbc_testが接続したいターゲットデータベースの名前です。

  • driver_url: JDBCドライバJARパッケージのダウンロードURL。HTTP URLまたはファイルURLがサポートされています。例:https://repo1.maven.org/maven2/org/postgresql/postgresql/42.3.3/postgresql-42.3.3.jarまたはfile:///home/disk1/postgresql-42.3.3.jar

  • driver_class: JDBCドライバのクラス名。一般的なデータベースのJDBCドライバクラス名は次のとおりです:

    • MySQL: com.mysql.jdbc.Driver (MySQL 5.x以前)、com.mysql.cj.jdbc.Driver (MySQL 6.x以降)
    • SQL Server: com.microsoft.sqlserver.jdbc.SQLServerDriver
    • Oracle: oracle.jdbc.driver.OracleDriver
    • PostgreSQL: org.postgresql.Driver

リソースが作成されると、FEはdriver_urlパラメータで指定されたURLを使用してJDBCドライバJARパッケージをダウンロードし、チェックサムを生成し、BEsがダウンロードしたJDBCドライバを検証するためにチェックサムを使用します。

注: JDBCドライバJARパッケージのダウンロードが失敗した場合、リソースの作成も失敗します。

BEsがJDBC外部テーブルを初めてクエリし、対応するJDBCドライバJARパッケージがマシン上に存在しない場合、BEsはdriver_urlパラメータで指定されたURLを使用してJDBCドライバJARパッケージをダウンロードし、すべてのJDBCドライバJARパッケージは${STARROCKS_HOME}/lib/jdbc_driversディレクトリに保存されます。

JDBCリソースの表示

以下のステートメントを実行して、StarRocks内のすべてのJDBCリソースを表示します:

SHOW RESOURCES;

注: ResourceType列はjdbcです。

JDBCリソースの削除

以下のステートメントを実行して、jdbc0という名前のJDBCリソースを削除します:

DROP RESOURCE "jdbc0";

注: JDBCリソースが削除されると、そのJDBCリソースを使用して作成されたすべてのJDBC外部テーブルが利用できなくなります。ただし、ターゲットデータベース内のデータは失われません。StarRocksを使用してターゲットデータベース内のデータをクエリする必要がある場合は、JDBCリソースとJDBC外部テーブルを再作成することができます。

データベースの作成

以下のステートメントを実行して、StarRocks内にjdbc_testという名前のデータベースを作成し、アクセスします:

CREATE DATABASE jdbc_test; 
USE jdbc_test;

注: 前述のステートメントで指定したデータベース名は、ターゲットデータベースの名前と同じである必要はありません。

JDBC外部テーブルの作成

以下のステートメントを実行して、jdbc_testデータベース内にjdbc_tblという名前のJDBC外部テーブルを作成します:

create external table jdbc_tbl (
`id` bigint NULL,
`data` varchar(200) NULL
) ENGINE=jdbc
properties (
"resource" = "jdbc0",
"table" = "dest_tbl"
);

propertiesで必要なパラメータは次のとおりです:

  • resource: 外部テーブルを作成するために使用されるJDBCリソースの名前。

  • table: データベース内のターゲットテーブル名。

StarRocksとターゲットデータベース間のサポートされているデータ型とデータ型のマッピングについては、[Data type mapping](External_table.md#Data type mapping)を参照してください。

注:

  • インデックスはサポートされていません。
  • PARTITION BYまたはDISTRIBUTED BYを使用してデータ分布ルールを指定することはできません。

JDBC外部テーブルのクエリ

JDBC外部テーブルをクエリする前に、以下のステートメントを実行してPipelineエンジンを有効にする必要があります:

set enable_pipeline_engine=true;

注: Pipelineエンジンが既に有効になっている場合、このステップをスキップできます。

以下のステートメントを実行して、JDBC外部テーブルを使用してターゲットデータベース内のデータをクエリします。

select * from JDBC_tbl;

StarRocksは、フィルター条件をターゲットテーブルにプッシュダウンすることによって、述語プッシュダウンをサポートしています。データソースにできるだけ近い場所でフィルター条件を実行することで、クエリパフォーマンスを向上させることができます。現在、StarRocksは、バイナリ比較演算子(>, >=, =, <, <=)、INIS NULLBETWEEN ... AND ...を含む演算子をプッシュダウンできます。ただし、StarRocksは関数をプッシュダウンすることはできません。

データ型のマッピング

現在、StarRocksは、ターゲットデータベース内の基本型のデータのみをクエリできます。例えば、NUMBER、STRING、TIME、DATEなどです。ターゲットデータベース内のデータ値の範囲がStarRocksでサポートされていない場合、クエリはエラーを報告します。

ターゲットデータベースとStarRocks間のマッピングは、ターゲットデータベースのタイプに基づいて異なります。

MySQLとStarRocks

MySQLStarRocks
BOOLEANBOOLEAN
TINYINTTINYINT
SMALLINTSMALLINT
MEDIUMINTINTINT
BIGINTBIGINT
FLOATFLOAT
DOUBLEDOUBLE
DECIMALDECIMAL
CHARCHAR
VARCHARVARCHAR
DATEDATE
DATETIMEDATETIME

OracleとStarRocks

OracleStarRocks
CHARCHAR
VARCHARVARCHAR2VARCHAR
DATEDATE
SMALLINTSMALLINT
INTINT
BINARY_FLOATFLOAT
BINARY_DOUBLEDOUBLE
DATEDATE
DATETIMEDATETIME
NUMBERDECIMAL

PostgreSQLとStarRocks

PostgreSQLStarRocks
SMALLINTSMALLSERIALSMALLINT
INTEGERSERIALINT
BIGINTBIGSERIALBIGINT
BOOLEANBOOLEAN
REALFLOAT
DOUBLE PRECISIONDOUBLE
DECIMALDECIMAL
TIMESTAMPDATETIME
DATEDATE
CHARCHAR
VARCHARVARCHAR
TEXTVARCHAR

SQL ServerとStarRocks

SQL ServerStarRocks
BOOLEANBOOLEAN
TINYINTTINYINT
SMALLINTSMALLINT
INTINT
BIGINTBIGINT
FLOATFLOAT
REALDOUBLE
DECIMALNUMERICDECIMAL
CHARCHAR
VARCHARVARCHAR
DATEDATE
DATETIMEDATETIME2DATETIME

制限事項

  • JDBC外部テーブルを作成する際、テーブルにインデックスを作成したり、PARTITION BYやDISTRIBUTED BYを使用してテーブルのデータ分布ルールを指定することはできません。

  • JDBC外部テーブルをクエリする際、StarRocksは関数をテーブルにプッシュダウンすることはできません。

(非推奨) Elasticsearch外部テーブル

StarRocksとElasticsearchは、2つの人気のある分析システムです。StarRocksは大規模な分散コンピューティングで高性能を発揮し、Elasticsearchはフルテキスト検索に最適です。StarRocksとElasticsearchを組み合わせることで、より完全なOLAPソリューションを提供できます。

Elasticsearch外部テーブルの作成例

構文

CREATE EXTERNAL TABLE elastic_search_external_table
(
k1 DATE,
k2 INT,
k3 SMALLINT,
k4 VARCHAR(2048),
k5 DATETIME
)
ENGINE=ELASTICSEARCH
PROPERTIES (
"hosts" = "http://192.168.0.1:9200,http://192.168.0.2:9200",
"user" = "root",
"password" = "root",
"index" = "tindex",
"type" = "_doc",
"es.net.ssl" = "true"
);

以下の表は、パラメータを説明しています。

パラメータ必須デフォルト値説明
hostsYesNoneElasticsearchクラスターの接続アドレス。1つ以上のアドレスを指定できます。StarRocksは、このアドレスからElasticsearchのバージョンとインデックスシャードの割り当てを解析します。StarRocksは、GET /_nodes/http API操作によって返されるアドレスに基づいてElasticsearchクラスターと通信します。したがって、hostパラメータの値は、GET /_nodes/http API操作によって返されるアドレスと同じでなければなりません。そうでない場合、BEsはElasticsearchクラスターと通信できない可能性があります。
indexYesNoneStarRocksのテーブルに作成されるElasticsearchインデックスの名前。名前はエイリアスであることができます。このパラメータはワイルドカード(*)をサポートしています。たとえば、indexhello*に設定すると、StarRocksは名前がhelloで始まるすべてのインデックスを取得します。
userNoEmpty基本認証が有効なElasticsearchクラスターにログインするために使用されるユーザー名。/*cluster/state/*nodes/httpとインデックスへのアクセス権を持っていることを確認してください。
passwordNoEmptyElasticsearchクラスターにログインするために使用されるパスワード。
typeNo_docインデックスのタイプ。デフォルト値:_doc。Elasticsearch 8以降のバージョンでデータをクエリする場合、このパラメータを設定する必要はありません。Elasticsearch 8以降のバージョンでは、マッピングタイプが削除されています。
es.nodes.wan.onlyNofalseStarRocksがElasticsearchクラスターにアクセスしてデータを取得するためにhostsで指定されたアドレスのみを使用するかどうかを指定します。
  • true: StarRocksは、Elasticsearchクラスターにアクセスしてデータを取得するためにhostsで指定されたアドレスのみを使用し、Elasticsearchインデックスのシャードが存在するデータノードをスニッフしません。StarRocksがElasticsearchクラスター内のデータノードのアドレスにアクセスできない場合、このパラメータをtrueに設定する必要があります。
  • false: StarRocksは、Elasticsearchクラスターインデックスのシャードが存在するデータノードをスニッフするためにhostで指定されたアドレスを使用します。StarRocksがElasticsearchクラスター内のデータノードのアドレスにアクセスできる場合、デフォルト値falseを保持することをお勧めします。
es.net.sslNofalseElasticsearchクラスターにアクセスするためにHTTPSプロトコルを使用できるかどうかを指定します。StarRocks 2.4以降のバージョンのみがこのパラメータの設定をサポートしています。
  • true: ElasticsearchクラスターにアクセスするためにHTTPSおよびHTTPプロトコルの両方を使用できます。
  • false: ElasticsearchクラスターにアクセスするためにHTTPプロトコルのみを使用できます。
enable_docvalue_scanNotrueElasticsearch列指向ストレージからターゲットフィールドの値を取得するかどうかを指定します。ほとんどの場合、列指向ストレージからデータを読み取る方が行指向ストレージからデータを読み取るよりも優れています。
enable_keyword_sniffNotrueKEYWORDタイプのフィールドに基づいてElasticsearchでTEXTタイプのフィールドをスニッフするかどうかを指定します。このパラメータがfalseに設定されている場合、StarRocksはトークン化後にマッチングを実行します。
より高速なクエリのための列指向スキャン

enable_docvalue_scantrueに設定すると、StarRocksはElasticsearchからデータを取得する際に次のルールに従います:

  • 試してみる: StarRocksは、ターゲットフィールドに対して列指向ストレージが有効かどうかを自動的に確認します。有効であれば、StarRocksはターゲットフィールドのすべての値を列指向ストレージから取得します。
  • 自動ダウングレード: ターゲットフィールドのいずれかが列指向ストレージで利用できない場合、StarRocksは行指向ストレージ(_source)からターゲットフィールドのすべての値を解析して取得します。

注意

  • Elasticsearchでは、TEXTタイプのフィールドに対して列指向ストレージは利用できません。したがって、TEXTタイプの値を含むフィールドをクエリする場合、StarRocksはフィールドの値を_sourceから取得します。
  • 多数のフィールド(25以上)をクエリする場合、docvalueからフィールド値を読み取ることは、_sourceからフィールド値を読み取ることと比較して顕著な利点を示しません。
KEYWORDタイプのフィールドをスニッフ

enable_keyword_snifftrueに設定すると、Elasticsearchはインデックスなしで直接データ取り込みを許可します。取り込み後に自動的にインデックスを作成します。STRINGタイプのフィールドに対して、ElasticsearchはTEXTタイプとKEYWORDタイプの両方を持つフィールドを作成します。これはElasticsearchのマルチフィールド機能の動作です。マッピングは次のようになります:

"k4": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}

たとえば、k4に対して"="フィルタリングを行う場合、StarRocks on Elasticsearchはフィルタリング操作をElasticsearchのTermQueryに変換します。

元のSQLフィルタは次のとおりです:

k4 = "StarRocks On Elasticsearch"

変換されたElasticsearchクエリDSLは次のとおりです:

"term" : {
"k4": "StarRocks On Elasticsearch"

}

k4の最初のフィールドはTEXTであり、k4に設定されたアナライザー(またはアナライザーが設定されていない場合は標準アナライザー)によってデータ取り込み後にトークン化されます。その結果、最初のフィールドはStarRocksOnElasticsearchの3つの用語にトークン化されます。詳細は次のとおりです:

POST /_analyze
{
"analyzer": "standard",
"text": "StarRocks On Elasticsearch"
}

トークン化の結果は次のとおりです:

{
"tokens": [
{
"token": "starrocks",
"start_offset": 0,
"end_offset": 5,
"type": "<ALPHANUM>",
"position": 0
},
{
"token": "on",
"start_offset": 6,
"end_offset": 8,
"type": "<ALPHANUM>",
"position": 1
},
{
"token": "elasticsearch",
"start_offset": 9,
"end_offset": 11,
"type": "<ALPHANUM>",
"position": 2
}
]
}

次のようなクエリを実行するとします:

"term" : {
"k4": "StarRocks On Elasticsearch"
}

辞書にStarRocks On Elasticsearchに一致する用語がないため、結果は返されません。

ただし、enable_keyword_snifftrueに設定している場合、StarRocksはk4 = "StarRocks On Elasticsearch"k4.keyword = "StarRocks On Elasticsearch"に変換してSQLセマンティクスに一致させます。変換されたStarRocks On ElasticsearchクエリDSLは次のとおりです:

"term" : {
"k4.keyword": "StarRocks On Elasticsearch"
}

k4.keywordはKEYWORDタイプです。したがって、データはElasticsearchに完全な用語として書き込まれ、正常に一致します。

カラムデータ型のマッピング

外部テーブルを作成する際、Elasticsearchテーブル内のカラムデータ型に基づいて外部テーブルのカラムデータ型を指定する必要があります。次の表は、カラムデータ型のマッピングを示しています。

ElasticsearchStarRocks
BOOLEANBOOLEAN
BYTETINYINT/SMALLINT/INT/BIGINT
SHORTSMALLINT/INT/BIGINT
INTEGERINT/BIGINT
LONGBIGINT
FLOATFLOAT
DOUBLEDOUBLE
KEYWORDCHAR/VARCHAR
TEXTCHAR/VARCHAR
DATEDATE/DATETIME
NESTEDCHAR/VARCHAR
OBJECTCHAR/VARCHAR
ARRAYARRAY

注意

  • StarRocksは、NESTEDタイプのデータをJSON関連の関数を使用して読み取ります。
  • Elasticsearchは多次元配列を自動的に一次元配列にフラット化します。StarRocksも同様です。ElasticsearchからのARRAYデータのクエリサポートはv2.5から追加されました。

述語プッシュダウン

StarRocksは述語プッシュダウンをサポートしています。フィルターはElasticsearchにプッシュダウンされて実行され、クエリパフォーマンスを向上させます。次の表は、述語プッシュダウンをサポートする演算子を示しています。

SQL構文ES構文
=term query
interms query
>=, <=, >, <range
andbool.filter
orbool.should
notbool.must_not
not inbool.must_not + terms
esqueryES Query DSL

esquery関数は、SQLで表現できないクエリ(matchやgeoshapeなど)をElasticsearchにプッシュダウンしてフィルタリングを行うために使用されます。esquery関数の最初のパラメータはインデックスを関連付けるために使用されます。2番目のパラメータは、で囲まれた基本的なQuery DSLのJSON式です。JSON式には1つのルートキーが必要ですが、それ以上は許可されません。たとえば、match、geo_shape、boolなどです。

  • matchクエリ
select * from es_table where esquery(k4, '{
"match": {
"k4": "StarRocks on elasticsearch"
}
}');
  • geo関連クエリ
select * from es_table where esquery(k4, '{
"geo_shape": {
"location": {
"shape": {
"type": "envelope",
"coordinates": [
[
13,
53
],
[
14,
52
]
]
},
"relation": "within"
}
}
}');
  • boolクエリ
select * from es_table where esquery(k4, ' {
"bool": {
"must": [
{
"terms": {
"k1": [
11,
12
]
}
},
{
"terms": {
"k2": [
100
]
}
}
]
}
}');

使用上の注意

  • Elasticsearch 5.x以前は、5.x以降とは異なる方法でデータをスキャンします。現在、5.x以降のバージョンのみがサポートされています
  • HTTP基本認証が有効なElasticsearchクラスターがサポートされています。
  • StarRocksからデータをクエリすることは、Elasticsearchから直接データをクエリすることほど高速ではない場合があります。たとえば、カウント関連のクエリです。その理由は、Elasticsearchがターゲットドキュメントのメタデータを直接読み取り、実際のデータをフィルタリングする必要がないため、カウントクエリが高速化されるためです。

(非推奨) Hive外部テーブル

Hive外部テーブルを使用する前に、サーバーにJDK 1.8がインストールされていることを確認してください。

Hiveリソースの作成

HiveリソースはHiveクラスターに対応します。StarRocksで使用されるHiveクラスターを構成する必要があります。たとえば、Hiveメタストアのアドレスを指定する必要があります。Hive外部テーブルで使用されるHiveリソースを指定する必要があります。

  • hive0という名前のHiveリソースを作成します。
CREATE EXTERNAL RESOURCE "hive0"
PROPERTIES (
"type" = "hive",
"hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083"
);
  • StarRocksで作成されたリソースを表示します。
SHOW RESOURCES;
  • hive0という名前のリソースを削除します。
DROP RESOURCE "hive0";

StarRocks 2.3以降のバージョンでは、StarRocks内のHiveリソースのhive.metastore.urisを変更できます。詳細については、ALTER RESOURCEを参照してください。

データベースの作成

CREATE DATABASE hive_test;
USE hive_test;

Hive外部テーブルの作成

構文

CREATE EXTERNAL TABLE table_name (
col_name col_type [NULL | NOT NULL] [COMMENT "comment"]
) ENGINE=HIVE
PROPERTIES (
"key" = "value"
);

例:hive0リソースに対応するHiveクラスターのrawdataデータベースに外部テーブルprofile_parquet_p7を作成します。

CREATE EXTERNAL TABLE `profile_wos_p7` (
`id` bigint NULL,
`first_id` varchar(200) NULL,
`second_id` varchar(200) NULL,
`p__device_id_list` varchar(200) NULL,
`p__is_deleted` bigint NULL,
`p_channel` varchar(200) NULL,
`p_platform` varchar(200) NULL,
`p_source` varchar(200) NULL,
`p__city` varchar(200) NULL,
`p__province` varchar(200) NULL,
`p__update_time` bigint NULL,
`p__first_visit_time` bigint NULL,
`p__last_seen_time` bigint NULL
) ENGINE=HIVE
PROPERTIES (
"resource" = "hive0",
"database" = "rawdata",
"table" = "profile_parquet_p7"
);

説明:

  • 外部テーブルのカラム

    • カラム名はHiveテーブルのカラム名と同じでなければなりません。
    • カラムの順序はHiveテーブルのカラム順序と同じである必要はありません。
    • Hiveテーブルのカラムの一部のみを選択できますが、すべてのパーティションキーのカラムを選択する必要があります。
    • 外部テーブルのパーティションキーのカラムはpartition byを使用して指定する必要はありません。他のカラムと同じ説明リストで定義する必要があります。パーティション情報を指定する必要はありません。StarRocksはHiveテーブルからこの情報を自動的に同期します。
    • ENGINEをHIVEに設定します。
  • PROPERTIES:

    • hive.resource: 使用されるHiveリソース。
    • database: Hiveデータベース。
    • table: Hiveのテーブル。ビューはサポートされていません。
  • 以下の表は、HiveとStarRocks間のカラムデータ型のマッピングを示しています。

    HiveのカラムタイプStarRocksのカラムタイプ説明
    INT/INTEGERINT
    BIGINTBIGINT
    TIMESTAMPDATETIMETIMESTAMPデータをDATETIMEデータに変換する際、精度とタイムゾーン情報が失われます。セッション変数のタイムゾーンに基づいて、タイムゾーンオフセットのないDATETIMEデータにTIMESTAMPデータを変換する必要があります。
    STRINGVARCHAR
    VARCHARVARCHAR
    CHARCHAR
    DOUBLEDOUBLE
    FLOATFLOAT
    DECIMALDECIMAL
    ARRAYARRAY

注:

  • 現在、サポートされているHiveストレージ形式はParquet、ORC、CSVです。 CSV形式の場合、引用符をエスケープ文字として使用することはできません。
  • SNAPPYおよびLZ4圧縮形式がサポートされています。
  • クエリ可能なHive文字列カラムの最大長は1 MBです。文字列カラムが1 MBを超える場合、nullカラムとして処理されます。

Hive外部テーブルの使用

profile_wos_p7の行数の合計をクエリします。

select count(*) from profile_wos_p7;

キャッシュされたHiveテーブルメタデータの更新

  • Hiveのパーティション情報と関連するファイル情報はStarRocksにキャッシュされます。キャッシュはhive_meta_cache_refresh_interval_sで指定された間隔で更新されます。デフォルト値は7200です。hive_meta_cache_ttl_sはキャッシュのタイムアウト期間を指定し、デフォルト値は86400です。
    • キャッシュされたデータは手動で更新することもできます。
      1. Hiveでテーブルからパーティションが追加または削除された場合、StarRocksにキャッシュされたテーブルメタデータを更新するためにREFRESH EXTERNAL TABLE hive_tコマンドを実行する必要があります。hive_tはStarRocks内のHive外部テーブルの名前です。
      2. Hiveの一部のパーティションのデータが更新された場合、StarRocksにキャッシュされたデータを更新するためにREFRESH EXTERNAL TABLE hive_t PARTITION ('k1=01/k2=02', 'k1=03/k2=04')コマンドを実行する必要があります。hive_tはStarRocks内のHive外部テーブルの名前です。'k1=01/k2=02'および'k1=03/k2=04'はデータが更新されたHiveパーティションの名前です。
      3. REFRESH EXTERNAL TABLE hive_tを実行すると、StarRocksはまずHive外部テーブルのカラム情報がHive Metastoreから返されたHiveテーブルのカラム情報と同じであるかどうかを確認します。Hiveテーブルのスキーマが変更された場合(カラムの追加や削除など)、StarRocksは変更をHive外部テーブルに同期します。同期後、Hive外部テーブルのカラム順序はHiveテーブルのカラム順序と同じままであり、パーティションカラムが最後のカラムになります。
  • HiveデータがParquet、ORC、CSV形式で保存されている場合、StarRocks 2.3以降のバージョンでは、Hiveテーブルのスキーマ変更(ADD COLUMNやREPLACE COLUMNなど)をHive外部テーブルに同期できます。

オブジェクトストレージへのアクセス

  • FE設定ファイルのパスはfe/confであり、Hadoopクラスターをカスタマイズする必要がある場合は設定ファイルを追加できます。たとえば、HDFSクラスターが高可用性のネームサービスを使用している場合、hdfs-site.xmlfe/confに配置する必要があります。HDFSがViewFsで構成されている場合、core-site.xmlfe/confに配置する必要があります。

  • BE設定ファイルのパスはbe/confであり、Hadoopクラスターをカスタマイズする必要がある場合は設定ファイルを追加できます。たとえば、高可用性のネームサービスを使用するHDFSクラスターの場合、hdfs-site.xmlbe/confに配置する必要があります。HDFSがViewFsで構成されている場合、core-site.xmlbe/confに配置する必要があります。

  • BEが配置されているマシンで、BEの起動スクリプトbin/start_be.shでJDK環境としてJAVA_HOMEを構成します。たとえば、export JAVA_HOME = <JDK path>です。この構成をスクリプトの先頭に追加し、BEを再起動して構成を有効にする必要があります。

  • Kerberosサポートを構成します:

    1. HiveおよびHDFSにアクセスするために、すべてのFE/BEマシンでkinit -kt keytab_path principalを使用してログインする必要があります。kinitコマンドのログインは一定期間のみ有効であり、定期的に実行するためにcrontabに追加する必要があります。
    2. hive-site.xml/core-site.xml/hdfs-site.xmlfe/confに配置し、core-site.xml/hdfs-site.xmlbe/confに配置します。
    3. $FE_HOME/conf/fe.confファイルのJAVA_OPTSオプションの値に-Djava.security.krb5.conf=/etc/krb5.confを追加します。/etc/krb5.confkrb5.confファイルの保存パスです。オペレーティングシステムに基づいてパスを変更できます。
    4. $BE_HOME/conf/be.confファイルに直接JAVA_OPTS="-Djava.security.krb5.conf=/etc/krb5.conf"を追加します。/etc/krb5.confkrb5.confファイルの保存パスです。オペレーティングシステムに基づいてパスを変更できます。
    5. Hiveリソースを追加する際、hive.metastore.urisにドメイン名を渡す必要があります。さらに、Hive/HDFSのドメイン名とIPアドレスのマッピングを**/etc/hosts**ファイルに追加する必要があります。
  • AWS S3のサポートを構成します:以下の構成をfe/conf/core-site.xmlおよびbe/conf/core-site.xmlに追加します。

    <configuration>
    <property>
    <name>fs.s3a.access.key</name>
    <value>******</value>
    </property>
    <property>
    <name>fs.s3a.secret.key</name>
    <value>******</value>
    </property>
    <property>
    <name>fs.s3a.endpoint</name>
    <value>s3.us-west-2.amazonaws.com</value>
    </property>
    <property>
    <name>fs.s3a.connection.maximum</name>
    <value>500</value>
    </property>
    </configuration>
    1. fs.s3a.access.key: AWSアクセスキーID。
    2. fs.s3a.secret.key: AWSシークレットキー。
    3. fs.s3a.endpoint: 接続するAWS S3エンドポイント。
    4. fs.s3a.connection.maximum: StarRocksからS3への同時接続の最大数。クエリ中にTimeout waiting for connection from pollエラーが発生した場合、このパラメータを大きな値に設定できます。

(非推奨) Iceberg外部テーブル

v2.1.0以降、StarRocksは外部テーブルを使用してApache Icebergからデータをクエリすることを許可しています。Icebergのデータをクエリするには、StarRocksにIceberg外部テーブルを作成する必要があります。テーブルを作成する際、クエリしたいIcebergテーブルと外部テーブルの間にマッピングを確立する必要があります。

始める前に

StarRocksがApache Icebergで使用されるメタデータサービス(Hiveメタストアなど)、ファイルシステム(HDFSなど)、オブジェクトストレージシステム(Amazon S3やAlibaba Cloud Object Storage Serviceなど)にアクセスする権限を持っていることを確認してください。

注意事項

  • Iceberg外部テーブルは、次のタイプのデータのみをクエリするために使用できます:

    • Iceberg v1テーブル(分析データテーブル)。ORC形式のIceberg v2(行レベルの削除)テーブルはv3.0以降でサポートされ、Parquet形式のIceberg v2テーブルはv3.1以降でサポートされます。Iceberg v1テーブルとIceberg v2テーブルの違いについては、Iceberg Table Specを参照してください。
    • gzip(デフォルト形式)、Zstd、LZ4、Snappy形式で圧縮されたテーブル。
    • ParquetまたはORC形式で保存されたファイル。
  • StarRocks 2.3以降のバージョンのIceberg外部テーブルは、Icebergテーブルのスキーマ変更を同期することをサポートしていますが、StarRocks 2.3以前のバージョンのIceberg外部テーブルはサポートしていません。Icebergテーブルのスキーマが変更された場合、対応する外部テーブルを削除して新しいものを作成する必要があります。

手順

ステップ1: Icebergリソースの作成

Iceberg外部テーブルを作成する前に、StarRocksでIcebergリソースを作成する必要があります。このリソースはIcebergアクセス情報を管理するために使用されます。さらに、外部テーブルを作成するためのステートメントでこのリソースを指定する必要があります。ビジネス要件に基づいてリソースを作成できます:

  • IcebergテーブルのメタデータがHiveメタストアから取得される場合、リソースを作成し、catalogタイプをHIVEに設定できます。

  • Icebergテーブルのメタデータが他のサービスから取得される場合、カスタムcatalogを作成する必要があります。その後、リソースを作成し、catalogタイプをCUSTOMに設定します。

catalogタイプがHIVEのリソースを作成

たとえば、iceberg0という名前のリソースを作成し、catalogタイプをHIVEに設定します。

CREATE EXTERNAL RESOURCE "iceberg0" 
PROPERTIES (
"type" = "iceberg",
"iceberg.catalog.type" = "HIVE",
"iceberg.catalog.hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083"
);

以下の表は、関連するパラメータを説明しています。

パラメータ説明
typeリソースタイプ。値をicebergに設定します。
iceberg.catalog.typeリソースのcatalogタイプ。Hive catalogとカスタムcatalogの両方がサポートされています。Hive catalogを指定する場合、値をHIVEに設定します。カスタムcatalogを指定する場合、値をCUSTOMに設定します。
iceberg.catalog.hive.metastore.urisHiveメタストアのURI。パラメータ値は次の形式です:thrift://< IcebergメタデータのIPアドレス >:< ポート番号 >。ポート番号はデフォルトで9083です。Apache IcebergはHive catalogを使用してHiveメタストアにアクセスし、Icebergテーブルのメタデータをクエリします。
catalogタイプがCUSTOMのリソースを作成

カスタムcatalogは、抽象クラスBaseMetastoreCatalogを継承する必要があり、IcebergCatalogインターフェースを実装する必要があります。さらに、カスタムcatalogのクラス名はStarRockに既に存在するクラスの名前と重複してはなりません。catalogが作成された後、catalogとその関連ファイルをパッケージ化し、各フロントエンド(FE)のfe/libパスに配置します。その後、各FEを再起動します。前述の操作を完了した後、catalogがカスタムcatalogであるリソースを作成できます。

たとえば、iceberg1という名前のリソースを作成し、catalogタイプをCUSTOMに設定します。

CREATE EXTERNAL RESOURCE "iceberg1" 
PROPERTIES (
"type" = "iceberg",
"iceberg.catalog.type" = "CUSTOM",
"iceberg.catalog-impl" = "com.starrocks.IcebergCustomCatalog"
);

以下の表は、関連するパラメータを説明しています。

パラメータ説明
typeリソースタイプ。値をicebergに設定します。
iceberg.catalog.typeリソースのcatalogタイプ。Hive catalogとカスタムcatalogの両方がサポートされています。Hive catalogを指定する場合、値をHIVEに設定します。カスタムcatalogを指定する場合、値をCUSTOMに設定します。
iceberg.catalog-implカスタムcatalogの完全修飾クラス名。FEsはこの名前に基づいてcatalogを検索します。catalogにカスタム構成項目が含まれている場合、Iceberg外部テーブルを作成する際にPROPERTIESパラメータにキーと値のペアとして追加する必要があります。

StarRocks 2.3以降のバージョンでは、StarRocks内のIcebergリソースのhive.metastore.urisおよびiceberg.catalog-implを変更できます。詳細については、ALTER RESOURCEを参照してください。

Icebergリソースの表示
SHOW RESOURCES;
Icebergリソースの削除

たとえば、iceberg0という名前のリソースを削除します。

DROP RESOURCE "iceberg0";

Icebergリソースを削除すると、そのリソースを参照するすべての外部テーブルが利用できなくなります。ただし、Apache Iceberg内の対応するデータは削除されません。Apache Iceberg内のデータを引き続きクエリする必要がある場合は、新しいリソースと新しい外部テーブルを作成してください。

ステップ2: (オプション) データベースの作成

たとえば、StarRocksにiceberg_testという名前のデータベースを作成します。

CREATE DATABASE iceberg_test; 
USE iceberg_test;

注: StarRocks内のデータベース名は、Apache Iceberg内のデータベース名と異なる場合があります。

ステップ3: Iceberg外部テーブルの作成

たとえば、iceberg_testデータベース内にiceberg_tblという名前のIceberg外部テーブルを作成します。

CREATE EXTERNAL TABLE `iceberg_tbl` ( 
`id` bigint NULL,
`data` varchar(200) NULL
) ENGINE=ICEBERG
PROPERTIES (
"resource" = "iceberg0",
"database" = "iceberg",
"table" = "iceberg_table"
);

以下の表は、関連するパラメータを説明しています。

パラメータ説明
ENGINEエンジン名。値をICEBERGに設定します。
resource外部テーブルが参照するIcebergリソースの名前。
databaseIcebergテーブルが属するデータベースの名前。
tableIcebergテーブルの名前。

注:

  • 外部テーブルの名前は、Icebergテーブルの名前と異なる場合があります。

  • 外部テーブルのカラム名は、Icebergテーブルのカラム名と同じでなければなりません。2つのテーブルのカラム順序は異なる場合があります。

カスタムcatalogで構成項目を定義し、データをクエリする際に構成項目を有効にしたい場合、外部テーブルを作成する際にPROPERTIESパラメータにキーと値のペアとして構成項目を追加できます。たとえば、カスタムcatalogでcustom-catalog.propertiesという構成項目を定義した場合、次のコマンドを実行して外部テーブルを作成できます。

CREATE EXTERNAL TABLE `iceberg_tbl` ( 
`id` bigint NULL,
`data` varchar(200) NULL
) ENGINE=ICEBERG
PROPERTIES (
"resource" = "iceberg0",
"database" = "iceberg",
"table" = "iceberg_table",
"custom-catalog.properties" = "my_property"
);

外部テーブルを作成する際、Icebergテーブル内のカラムデータ型に基づいて外部テーブルのカラムデータ型を指定する必要があります。次の表は、カラムデータ型のマッピングを示しています。

IcebergテーブルIceberg外部テーブル
BOOLEANBOOLEAN
INTTINYINT / SMALLINT / INT
LONGBIGINT
FLOATFLOAT
DOUBLEDOUBLE
DECIMAL(P, S)DECIMAL
DATEDATE / DATETIME
TIMEBIGINT
TIMESTAMPDATETIME
STRINGSTRING / VARCHAR
UUIDSTRING / VARCHAR
FIXED(L)CHAR
BINARYVARCHAR
LISTARRAY

StarRocksは、TIMESTAMPTZ、STRUCT、およびMAPタイプのIcebergデータのクエリをサポートしていません。

ステップ4: Apache Icebergのデータをクエリ

外部テーブルが作成された後、外部テーブルを使用してApache Icebergのデータをクエリできます。

select count(*) from iceberg_tbl;

(非推奨) Hudi外部テーブル

v2.2.0以降、StarRocksはHudi外部テーブルを使用してHudiデータレイクからデータをクエリすることを許可しています。これにより、非常に高速なデータレイク分析が可能になります。このトピックでは、StarRocksクラスターでHudi外部テーブルを作成し、Hudiデータレイクからデータをクエリする方法について説明します。

始める前に

StarRocksクラスターがHiveメタストア、HDFSクラスター、またはHudiテーブルを登録できるバケットにアクセスする権限を持っていることを確認してください。

注意事項

  • Hudi外部テーブルは読み取り専用であり、クエリにのみ使用できます。
  • StarRocksは、Copy on WriteテーブルとMerge On Readテーブル(MORテーブルはv2.5からサポートされています)をクエリすることをサポートしています。これら2つのタイプのテーブルの違いについては、Table & Query Typesを参照してください。
  • StarRocksは、Hudiの次の2つのクエリタイプをサポートしています:スナップショットクエリと読み取り最適化クエリ(HudiはMerge On Readテーブルでのみ読み取り最適化クエリを実行することをサポートしています)。インクリメンタルクエリはサポートされていません。Hudiのクエリタイプの詳細については、Table & Query Typesを参照してください。
  • StarRocksは、Hudiファイルの次の圧縮形式をサポートしています:gzip、zstd、LZ4、およびSnappy。Hudiファイルのデフォルトの圧縮形式はgzipです。
  • StarRocksは、Hudi管理テーブルからのスキーマ変更を同期することはできません。詳細については、Schema Evolutionを参照してください。Hudi管理テーブルのスキーマが変更された場合、StarRocksクラスターから関連するHudi外部テーブルを削除し、その外部テーブルを再作成する必要があります。

手順

ステップ1: Hudiリソースの作成と管理

StarRocksクラスター内でHudiリソースを作成する必要があります。Hudiリソースは、StarRocksクラスター内で作成するHudiデータベースと外部テーブルを管理するために使用されます。

Hudiリソースの作成

以下のステートメントを実行して、hudi0という名前のHudiリソースを作成します:

CREATE EXTERNAL RESOURCE "hudi0" 
PROPERTIES (
"type" = "hudi",
"hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083"
);

以下の表は、パラメータを説明しています。

パラメータ説明
typeHudiリソースのタイプ。値をhudiに設定します。
hive.metastore.urisHudiリソースが接続するHiveメタストアのThrift URI。HudiリソースをHiveメタストアに接続した後、Hiveを使用してHudiテーブルを作成および管理できます。Thrift URIは<HiveメタストアのIPアドレス>:<Hiveメタストアのポート番号>形式です。デフォルトのポート番号は9083です。

v2.3以降、StarRocksはHudiリソースのhive.metastore.uris値を変更することを許可しています。詳細については、ALTER RESOURCEを参照してください。

Hudiリソースの表示

以下のステートメントを実行して、StarRocksクラスター内で作成されたすべてのHudiリソースを表示します:

SHOW RESOURCES;
Hudiリソースの削除

以下のステートメントを実行して、hudi0という名前のHudiリソースを削除します:

DROP RESOURCE "hudi0";

注:

Hudiリソースを削除すると、そのHudiリソースを使用して作成されたすべてのHudi外部テーブルが利用できなくなります。ただし、Hudiに保存されたデータには影響しません。StarRocksを使用してHudiからデータをクエリしたい場合は、StarRocksクラスター内でHudiリソース、Hudiデータベース、およびHudi外部テーブルを再作成する必要があります。

ステップ2: Hudiデータベースの作成

以下のステートメントを実行して、StarRocksクラスター内にhudi_testという名前のHudiデータベースを作成し、開きます:

CREATE DATABASE hudi_test; 
USE hudi_test;

注:

StarRocksクラスター内で指定するHudiデータベースの名前は、関連するHudiデータベースと同じである必要はありません。

ステップ3: Hudi外部テーブルの作成

以下のステートメントを実行して、hudi_test Hudiデータベース内にhudi_tblという名前のHudi外部テーブルを作成します:

CREATE EXTERNAL TABLE `hudi_tbl` ( 
`id` bigint NULL,
`data` varchar(200) NULL
) ENGINE=HUDI
PROPERTIES (
"resource" = "hudi0",
"database" = "hudi",
"table" = "hudi_table"
);

以下の表は、パラメータを説明しています。

パラメータ説明
ENGINEHudi外部テーブルのクエリエンジン。値をHUDIに設定します。
resourceStarRocksクラスター内のHudiリソースの名前。
databaseStarRocksクラスター内のHudi外部テーブルが属するHudiデータベースの名前。
tableHudi外部テーブルが関連付けられているHudi管理テーブル。

注:

  • 指定するHudi外部テーブルの名前は、関連するHudi管理テーブルと同じである必要はありません。

  • Hudi外部テーブル内のカラムは、関連するHudi管理テーブル内のカラムと同じ名前を持つ必要がありますが、順序は異なる場合があります。

  • 関連するHudi管理テーブルから一部またはすべてのカラムを選択し、選択したカラムのみをHudi外部テーブルに作成できます。次の表は、Hudiがサポートするデータ型とStarRocksがサポートするデータ型のマッピングを示しています。

Hudiがサポートするデータ型StarRocksがサポートするデータ型
BOOLEANBOOLEAN
INTTINYINT/SMALLINT/INT
DATEDATE
TimeMillis/TimeMicrosTIME
TimestampMillis/TimestampMicrosDATETIME
LONGBIGINT
FLOATFLOAT
DOUBLEDOUBLE
STRINGCHAR/VARCHAR
ARRAYARRAY
DECIMALDECIMAL

注意

StarRocksは、STRUCTまたはMAPタイプのデータのクエリをサポートしていないため、Merge On Readテーブル内のARRAYタイプのデータのクエリもサポートしていません。

ステップ4: Hudi外部テーブルからデータをクエリ

特定のHudi管理テーブルに関連付けられたHudi外部テーブルを作成した後、Hudi外部テーブルにデータをロードする必要はありません。Hudiからデータをクエリするには、次のステートメントを実行します:

SELECT COUNT(*) FROM hudi_tbl;

(非推奨) MySQL外部テーブル

スタースキーマでは、データは一般的にディメンジョンテーブルとファクトテーブルに分けられます。ディメンジョンテーブルはデータが少なく、UPDATE操作を伴います。現在、StarRocksは直接のUPDATE操作をサポートしていません(ユニークキーテーブルを使用して更新を実装できます)。いくつかのシナリオでは、ディメンジョンテーブルをMySQLに保存して直接データを読み取ることができます。

MySQLデータをクエリするには、StarRocksで外部テーブルを作成し、それをMySQLデータベース内のテーブルにマッピングする必要があります。テーブルを作成する際にMySQL接続情報を指定する必要があります。

CREATE EXTERNAL TABLE mysql_external_table
(
k1 DATE,
k2 INT,
k3 SMALLINT,
k4 VARCHAR(2048),
k5 DATETIME
)
ENGINE=mysql
PROPERTIES
(
"host" = "127.0.0.1",
"port" = "3306",
"user" = "mysql_user",
"password" = "mysql_passwd",
"database" = "mysql_db_test",
"table" = "mysql_table_test"
);

パラメータ:

  • host: MySQLデータベースの接続アドレス
  • port: MySQLデータベースのポート番号
  • user: MySQLにログインするためのユーザー名
  • password: MySQLにログインするためのパスワード
  • database: MySQLデータベースの名前
  • table: MySQLデータベース内のテーブルの名前