データ一括読み込み¶
Virtual DataPort では、以下に示す 3 つのシナリオで、データベースにデータを保存します。
デフォルトでは、Virtual DataPort は、データベースにデータを保存するために、SQL ステートメント INSERT
を実行して 1 行ずつ保存します。その際、これらのステートメント実行プロセスを高速化する手法を使用します (準備済みステートメントを使用してバッチ単位でステートメントを実行するなど)。
データベースの多くは、大量のデータを読み込む独自のインターフェイスを提供しています。これらのインターフェイスを使用すると、 INSERT
ステートメントを実行するよりはるかに速くデータを挿入できます。Virtual DataPort は、大多数のデータベースでこれらのインターフェイスを使用できます。
Virtual DataPort がこれらのインターフェイスのいずれかを使用するクエリを実行する場合、データを一時テキストファイルに書き込んでからそのインターフェイスを使用してファイルをデータベースに転送し、ファイルを削除します。
これらのインターフェイスを使用する価値があるのは、挿入する行数が数万件を超える場合です。データソースまたはキャッシュエンジンでこの機能を有効にする前に、この点を考慮してください。行数が少ない場合、パフォーマンスは向上しないか、場合によっては低下する可能性があります。
JDBC データソースは、以下のデータベースの一括読み込み API を使用するように構成できます。
AlloyDB for PostgreSQL
Amazon Athena
Amazon Aurora MySQL
Amazon Aurora PostgreSQL
Amazon Redshift
Azure Synapse SQL (旧称 Azure SQL Data Warehouse)
Databricks
Google BigQuery
Hive 2.0.0 以降
IBM DB2
Impala
Kudu (
Impala 3.x Kudu
アダプターを使用)Microsoft SQL Server
MySQL
Netezza
Oracle
PostgreSQL
PrestoDB/Trino
Snowflake
Spark
Teradata
Vertica
Yellowbrick
これらのデータベースのほとんどすべてに共通するのは、データ一括読み込みインターフェイスを使用するには、クライアントアプリケーション (この場合は Virtual DataPort サーバー) がデータを特定の形式で外部ファイルに書き込む必要があるという点です。その後で、このデータがデータベースに転送されます。
これらの一時ファイルは、デフォルトでは、Denodo のインストール環境に作成されます。別のディレクトリに書き込むには、データソースの [Read & Write] タブで、[Work path] テキストフィールドにそのディレクトリのパスを入力します。これらの一時ファイルは、データがデータベースに読み込まれた後に削除されます。
一部のデータベースでは、データベースベンダーから提供される補助アプリケーションをインストールする必要があります。このアプリケーションがデータファイルをデータベースに転送します。たとえば、Oracle の場合は sqlldr
、SQL Server の場合は bcp
などをインストールする必要があります。他のデータベースでは、その JDBC ドライバーにこの機能が含まれているので、アプリケーションをインストールする必要はありません。
以下のサブセクションに、外部アプリケーションをインストールする必要があるか、またはデフォルト設定を変更する必要があるデータベースのリストを示します。
HDFS または S3 などの分散オブジェクトストレージへのデータ一括読み込み¶
Hadoop 互換ストレージ (Hive、Impala、Presto、Spark、Databricks) を使用するデータベースでは、テーブルにデータを挿入する場合、オプション [Use bulk data load APIs] を構成する必要があります。
このような場合、Denodo では以下を実行します。
はじめに、挿入するデータを含む一時ファイルを Parquet 形式で生成します。
次に、該当のファイルを、このセクションで構成した特定のパスにアップロードします。
最後に、指定したパスからデータベーステーブルがデータを取り込むために必要な操作を行います。
これらのデータのアップロードに対応しているオブジェクトストレージは S3 と HDFS です。S3 や Hadoop API (Azure ADLS など) と互換性のあるルートを構成することもできます。このトピックの詳細については、「 Hadoop 互換ストレージのサポート 」のセクションを参照してください。これらの Parquet ファイルの生成の詳しい設定については、「 Hadoop 互換の分散オブジェクトストレージの一時ファイルの生成 」のセクションを参照してください。
Virtual DataPort には、データ一括読み込みを実行するために、以下の 2 つのメカニズムが実装されています。
組み込みライブラリ (推奨): これは Denodo 8.0 で新しく実装されたものです。
外部 Hadoop インストール環境: 旧バージョンの Denodo で使用されていたものです。Hadoop をダウンロードして構成する必要があります。
データソースを作成する場合に使用できるのは新しい実装のみです。ただし、古い実装で構成された既存のデータソースを開いた場合、引き続き古い実装を使用することも、古い実装を組み込み実装に変更することもできます。以降のサブセクションでは、各メカニズムについて詳しく説明します。
組み込み実装¶
Design Studio または Administration Tool で JDBC データソースを編集して、[Read & Write] タブをクリックし、[Use bulk data load APIs] を選択します。[File System] ドロップダウンで、データファイルのアップロードに使用するファイルシステムを選択します。選択できるオプションは、[HDFS] と [S3] です。Azure Data Lake Storage など、Hadoop API と互換性のある他のシステムを使用できます。これを行うには、[HDFS] を選択し、必要な Hadoop プロパティを指定します (「 Hadoop 互換ストレージのサポート 」のセクションを参照してください)。
HDFS
[HDFS URI] に、Virtual DataPort がデータファイルをアップロードする URI を入力します。以下に例を示します。hdfs://acme-node1.denodo.com/user/admin/data/
Apache Knox ゲートウェイによって HDFS へのアクセスが制限されている場合は、[Apache Knox configuration] セクションで、以下の操作を行います。
Authentication: [Basic authentication] を選択します (現在サポートされている認証方法です)。
Base URI: Apache Knox のベース URI を入力します。以下に例を示します。
https://acme.com:8443/gateway/default
User: ユーザー名を指定します。
Password: パスワードを入力します。
S3
[S3 URI] フィールドに、Virtual DataPort がデータファイルをアップロードする S3 バケットの URI を入力します。以下に例を示します。
s3://my-bucket/
認証を構成します。以下の 2 つの方法があります。
AWS アクセスキー を使用します。
[AWS access key ID] と [AWS secret access key] を入力します。
または、[パスワードボールト (資格情報保管場所) から資格情報を取得 (Obtain credentials from password vault)] を選択して、 資格情報ボールト から資格情報を取得します。
必要に応じて、[AWS IAM role ARN] を入力できます。AWS ユーザーはロールを引き受けて、バケットとのやり取りに必要な権限を取得します。ロールの ARN は、引き受ける IAM ロールの Amazon リソース名です。
arn:aws:iam::<awsAccountId>:role/<roleName>
などのロールの ARN を指定します。または、この Virtual DataPort サーバーが動作している AWS インスタンスからデータベースの資格情報を自動的に取得します。これを行うには、[Use Denodo AWS instance credentials] を選択します。オプションで
AWS IAM ロールの ARN
を指定して、必要な権限を取得することもできます。
[Hadoop properties] セクションでは、 core-site.xml
のような Hadoop 構成ファイルで使用されている Hadoop プロパティを設定できます。
外部 Hadoop インストール環境¶
注釈
このオプションは、VQL を使用して Hadoop 実行可能ファイルで作成された既存のデータソースの場合にのみ使用できます。
この手法でデータ一括読み込みを実行できるようにするには、以下の手順に従って実施してください。
Virtual DataPort のホストに Java Development Kit バージョン 8 (JDK) をインストールします。Hadoop には JDK が必要です。Java Runtime Environment (JRE) が無効です。
この JDK のパスを示すように JAVA_HOME 環境変数を設定します。Windows では、このパスにスペースが含まれることはよくありますが、Hadoop ではサポートされていません。スペースが含まれるパスに JDK がインストールされている場合、環境変数 JAVA_HOME を C:\Java に設定し、シンボリックリンクを作成します。
mklink /d "C:\Java" "C:\Program Files\Java\jdk1.8.0_152"
このコマンドを実行して権限エラーが発生した場合、Windows メニューをクリックし、[コマンド プロンプト] を見つけて右クリックして、[管理者として実行] をクリックします。
接続する Hadoop の特定のバージョンを調べて、 Apache Hadoop のサイト に移動し、使用するバージョンに対応するバイナリファイル (ソースファイルではない) をダウンロードします。たとえば、 hadoop-2.9.0.tar.gz をダウンロードします。
Hadoop では、Hadoop サーバーとそれにアクセスするためのクライアントを含む 1 つのファイルを提供しています。クライアントライブラリのみを含むパッケージは存在しません。
Virtual DataPort サーバーを実行しているホストでこのファイルを解凍します。
Linux では、次のコマンドを実行して解凍します。
tar -xzf <archive_name>.tar.gz
Windows では、ディレクトリ
<DENODO_HOME>/dll/vdp/winutils
内のファイルを<HADOOP_HOME>/bin
にコピーします。これを行わない場合、Parquet ファイルの生成と Hadoop への接続に失敗します。次の環境変数をシステムで設定します。
HADOOP_HOME={<directory where you decompressed Hadoop>}
データ一括読み込みのためにファイルをアップロードする場合、Hadoop に接続するために使用する認証方法に応じて、以下のオプションのいずれかを選択します。
Kerberos 認証ではなく標準認証を使用して Hadoop に接続するには、Virtual DataPort サーバーを実行しているホストで次の環境変数を設定します。
HADOOP_USER_NAME=<username in Hadoop>
このユーザー名のユーザーは、データのアップロード先である HDFS フォルダに対する読み取り権限と書き込み権限を持っている必要があります。
注釈
Hadoop に接続するアプリケーションが同じホスト内に複数存在する場合、環境変数を設定する代わりに、
HADOOP_USER_NAME
変数とHADOOP_HOME
変数を設定し、プラットフォームに応じてhadoop.cmd
またはhadoop
を呼び出すスクリプトを作成します。後でデータ一括読み込みを構成する際に、このスクリプトを参照します。Kerberos 認証を使用して Hadoop に接続するには、以下の変更を行います。
<HADOOP_HOME>/etc/hadoop/core-site.xml
ファイルを編集して、以下のプロパティを追加します。<property> <name>hadoop.security.authentication</name> <value>kerberos</value> </property> <property> <name>hadoop.security.authorization</name> <value>true</value> </property>
以下のスクリプトを作成します。
Linux の場合、次の内容を記述した
<DENODO_HOME>/renew_kerberos_ticket_for_bulk_data_load.sh
ファイルを作成します。#!/bin/bash kinit -k -t "<path to the keytab file>" <Kerberos principal name of the Hadoop service> $HADOOP_HOME/hadoop "$@"
ファイルを作成した後、次のコマンドを実行します。
chmod +x <DENODO_HOME>/renew_kerberos_ticket_for_bulk_data_load.sh
Windows の場合、次の内容を記述した
<DENODO_HOME>/renew_kerberos_ticket_for_bulk_data_load.bat
ファイルを作成します。@echo off kinit -k -t "<path to the keytab file>" <Kerberos principal name of the Hadoop service> %HADOOP_HOME%\hadoop.cmd %*
<path to the keytab file>
は、Hadoop サーバーに接続するためのキーを含むキータブファイルのパスで置き換えます。hadoop
を呼び出す前にkinit
を呼び出すことによって、Hadoop に接続できる有効な Kerberos チケットがシステムに存在することを確認します。
Administration Tool で JDBC データソースを編集して、[Read & Write] タブをクリックします。[Use bulk data load APIs] をチェックして、以下の設定を行います。
[Hadoop executable location] ボックスに、Windows の場合は
hadoop.cmd`ファイルへのパス、Linux の場合は :file:`hadoop
ファイルへのパスを入力します。前のステップでスクリプトrenew_kerberos_ticket_for_bulk_data_load
を作成した場合は、このファイルへのパスを入力します。[HDFS URI] に、Virtual DataPort がデータファイルをアップロードする URI を入力します。以下に例を示します。
hdfs://acme-node1.denodo.com/user/admin/data/