HiRDB Connector for Presto 03-00 Copyright (C) 2020 Hitachi, Ltd. はじめに HiRDB Connector for Prestoを使用することで、PrestoからHiRDBに接続して、SQL文を実行することができます。 このConnectorを使用することで、Presto上で他のインスタンスと結合などをおこなうことができます。 0.前提 本Connectorは、https://prestosql.io/で公開されているpresto-server-3XX.tar.gz[3xxは300以上の整数]向けのConnectorです。 以下の環境で動作確認を行いました。 Presto presto-server-315.tar.gz JRE OpenJDK Runtime Environment (build 1.8.0_212-8u212-b03-0ubuntu1.18.04.1-b03) OpenJDK Runtime Environment Corretto-11.0.6.10.1 1.使用方法 1.1 catalog properties file作成 PrestoのcatalogとしてHiRDB Connector for Prestoを構成するために、Prestoのetc/catalogにhirdb1.propertiesなどの名前のcatalog properties fileを作成し、HiRDB Connector for Prestoを設定してください。 catalog properties fileには、次の項目を設定してください。 各項目は、環境に合わせた値に置き換えてください。 ---- catalogファイルの設定内容ここから ---- connector.name=hirdb connection-url=jdbc:hitachi:hirdb[※1] connection-user=[認可識別子][※2] connection-password=[パスワード][※2] case-insensitive-name-matching=true[※3] case-insensitive-name-matching.cache-ttl=1m[※3] ---- catalogファイルの設定内容ここまで ---- ※1: 「UAP開発ガイド」の「getConnectionメソッドによるHiRDBへの接続」の「URL構文」を設定してください Prestoの内部では、文字をUTF-8として処理を行うので、HiRDBの文字コードがUTF-8以外の場合、必要に応じてENCODELANGを設定してください。 ※2: 認可識別子、パスワードに英小文字を含む場合、引用符(")で囲ってください。 ※3: Prestoは、SQL文の解析時に、SQL文中の識別子を全て小文字に変換しています。 HiRDBなどの識別子に大文字と小文字が混在するDBMSの場合、case-insensitive-name-matching=trueを設定して小文字の識別子と、混在する識別子をマッチングする必要があります。 そのためHiRDB Connector for Presto側で無条件にtrueにしています。 マッチング結果は、Presto側でキャッシュし、マッチング処理を高速化しています。 このキャッシュを持続させる時間をcase-insensitive-name-matching.cache-ttlにio.airlift.units.Duration.valueOfメソッドの引数の形式で設定してください。 頻繁に定義情報の変更を行う環境では、case-insensitive-name-matching.cache-ttlの値を短く設定してください。 Presto使用中に表定義を変更しない場合は、case-insensitive-name-matching.cache-ttlの値を長くしてください。 上記の1mは1分を意味します。 case-insensitive-name-matching.cache-ttlの指定がない場合は、1分を仮定します。 1.2 pluginフォルダ作成 pluginフォルダに「hirdb」フォルダを作成し、そのフォルダ内に以下のファイルを格納してください。 ---- plugin/hirdbフォルダに格納するファイルここから ---- ・presto-hirdb-03-00.jar(本ライブラリ) ・pdjdbc4.jar(HiRDB サーバ又はクライアントからコピーしてください)  以下はPrestoのバイナリからコピーしてください。XXXはPrestoバイナリに含まれるているバージョンにしてください。 ・presto-base-jdbc-XXX.jar (presto-hirdb-03-00のスーパークラス) ・bootstrap-XXX.jar (これ以降はスーパークラスが必要とするクラス) ・bval-jsr-XXX.jar ・configuration-XXX.jar ・guava-XXX-jre.jar ・guice-XXX.jar ・javax.annotation-api-X.X.X.jar ・javax.inject-XXX.jar ・joda-time-XXX.jar ・log-XXX.jar ・validation-api-XXX.Final.jar ---- plugin/hirdbフォルダに格納するファイルここまで ---- ※使用するJRE、Prestoのバージョンによってpresto-base-jdbc-XXX.jarが必要とするパッケージが変わる可能性があります。 そのときは、他のpluginのフォルダから適宜コピーを行ってください。 2.複数HiRDB接続 1つのHiRDB Connector for Prestoは、1つのHiRDBのデータベースに接続できます。 複数のHiRDBのデータベースに接続したい場合、HiRDB Connector for Prestoのインスタンスを複数設定してください。 違うカタログを追加するには、etc/catalogに拡張子を.propertiesとして異なる名前のファイルを作成してください。 例えば、sales.propertiesという名称のプロパティファイルを作成した場合、Prestoはプロパティファイル中で指定されたconnecterを使ってsalesという名称のカタログを作成します。 3.Querying HiRDB HiRDB Connector for Prestoは、connection-userに指定した認可識別子のスキーマに接続しします。 SHOW SCHEMASを実行することで、HiRDBで利用可能なスキーマが見られます。 SHOW SCHEMAS FROM hirdb1; スキーマ「web」という名称が存在する場合、そのスキーマ中に存在する全ての表をSHOW TABLESで見ることができます。 SHOW TABLES FROM hirdb1.web; スキーマ「web」の表「clicks」の列のリストを次のいずれかの構文で見ることができます。 DESCRIBE hirdb1.web.clicks; SHOW COLUMNS FROM hirdb1.web.clicks; スキーマ「web」の表「clicks」を検索する場合は、次のとおりです。 SELECT * FROM hirdb1.web.clicks; 4.制限事項 4.1名前の指定の制限 Prestoの仕様上、たとえ引用符(")で名前の指定(表名、列名など)を囲っても、Prestoは大文字と小文字を区別しません。[R1] 従って、大文字と小文字を無視した文字列比較で、同一の名称となる表が複数ある場合は、その表に対するSQL文を実行することができません。[R2] SQL文中に指定した表で、大文字と小文字を無視した文字列比較で、同一の名称となる列が複数存在する場合、たとえSQL文中にその列が出現しなくても、そのSQL文を実行することができません。[R3] 例: catalog hirdb1に表"user1"."T1"(C1,C2,C3)と表"user1"."t1"(C1,C2,C3)と表"user1"."T2"(C1,C2,C3)と表"user1"."T3"("c1",C1,C2)の4つの表が存在する場合  select * from hirdb1.user1."t2"[R1によりT2を検索する]  select * from hirdb1.user1.t1[R2により、エラー]  select "c2" from hirdb1.user1.t3[R3により、エラー] [R2][R3]のような場合、Prestoからアクセスするための別名のVIEW表を定義してアクセスしてください。 例として、"user".T3の場合は以下のようなVIEW表を作成して、このVIEW表経由でアクセスしてください。 CREATE VIEW "v1"(C1,C2) AS SELECT ("c1",C1) FROM "user".T3 4.2制限のあるPrestoの構文 以下のPrestoの構文は、対応していません。(作成時のPresto-315では基底クラスが対応していないため) ・ALTER SCHEMA ・ANALYZE ・CALL ・COMMENT ・COMMIT ※4 ・CREATE SCHEMA ・CREATE VIEW ・DELETE ・DROP SCHEMA ・DROP TABLE ・DROP VIEW ・GRANT ・REVOKE ・ROLLBACK ※4 ・SHOW CREATE VIEW ・SHOW GRANTS ・SHOW ROLES ・SHOW ROLE GRANTS ・START TRANSACTION ※4 ・UPDATE ※4 トランザクションは、Presto側で無条件にオートコミットされます。 そのため、ユーザ側での明示的なトランザクションの決着はできません。 4.3制限のあるHiRDBのデータ型 以下のデータ型は対応していません ・TIMESTAMP(2),TIMESTAMP(4),TIMESTAMP(6)(ミリ秒精度にしている場合は可能。2020-01-01 12:34:56.789000) ・BLOB ・INTERVAL YEAR TO DAY ・INTERVAL HOUR TO SECOND ・繰返し列 4.4その他制限 LANGにUTF-8を設定していないシェルでpresto-cliを実行すると、日本語が文字化けすることがあります。 表識別子、列名に全角文字が含まれる場合、dictionary datatype mchar=useがないと正しく表識別子、列名を取得できないことがあります。 dictionary datatype mchar=nouseの場合、名前の指定に全角文字を含まないVIEW表を別途用意してアクセスしてください。 -------------------------------------------------------------------------------- HITACHI、HiRDBは、株式会社 日立製作所の商標または登録商標です。 その他記載の会社名、製品名などは、それぞれの会社の商標もしくは登録商標です。