ビルトインのイベントスケジューラーを使用して SAP HANA Cloud, data lake リレーショナルエンジンに非同期でテーブルをロードする
2023-12-19 15:0:0 Author: blogs.sap.com(查看原文) 阅读量:5 收藏

このブログは、2023 年 5 月 10 日に SAP ジャパン公式ブログに掲載されたものを SAP ジャパン公式ブログ閉鎖に伴い転載したものです。


このブログは、Ronit Nagwekar が執筆したブログ「Load Tables Asynchronously in SAP HANA Cloud, data lake Relational Engine」(2022 年11 月 10 日)の抄訳です。最新の情報は、SAP Community の最新ブログマニュアルを参照してください。


ブログ概要 :

SAP HANA Cloud, data lake リレーショナルエンジンへのデータ移動は、データをロードする方法が一般的ですが、データのロードには、時間がかかります。

また、データベース接続を通じて実行されるため、オブジェクトストレージからの長時間ロードを容易にするために、SAP HANA Database Explorer (DBX)(またはクライアントアプリケーション)のセッションを開いたままにするのは難しいでしょう。

SAP HANA Cloud, data lake リレーショナルエンジンには、ビルトインのイベントスケジューラーが実装されており、SQL 機能のスケジューリングに使用することができます。

このブログでは、SAP HANA Cloud, HANA データベースから、SAP HANA Cloud, data lake リレーショナルエンジンへのデータ移動をスケジュール化する方法について紹介します。

データの準備、イベントの作成、SAP HANA Cloud, data lake リレーショナルエンジンへの非同期の Load Table までの全体プロセスをカバーします。

最初のステップは、SAP HANA Cloud, HANA データベースへのデータのインポートです。このGitHub レポジトリから、TPCH data.csv ファイルを直接インポートします。

ステップ 1 : GitHub から TPCH CUSTOMER DATASET をダウンロードする

  1. SAP HANA Cloud, HANA データベースインスタンス/テーブルにデータを IMPORT するために、この GitHub リポジトリより、TPCHデータファイルをダウンロードします。リンクをクリックすると、GitHub データファイルに直接リダイレクトされるので、そこからダウンロードすることができます。
  2. このブログでは、TPCH CUSTOMER Dataset を例として使用します。 customer.tbl ファイルを、ローカルマシンの customer.csv に保存してください。

ステップ 2 : HANA にテーブルを作成し、データをインポートする

データファイルをダウンロードしたら、SAP HANA Cloud, HANA データベースインスタンスでテーブルを作成する必要があります。ここにデータをインポートします。

SAP HANA Cloud, HANA データベースインスタンスに対してSQLコンソールをオープンし、以下のテーブルを作成します。

以下のコードで TPCH スキーマを SAP HANA Cloud, HANA データベースに作成し、このスキーマ内に CUSTOMER テーブルを作成します。

CREATE SCHEMA TPCH;


CREATE TABLE TPCH.CUSTOMER (
C_CUSTKEY            integer                        not null,
C_NAME               varchar(25)                    not null,
C_ADDRESS            varchar(40)                    not null,
C_NATIONKEY          integer                        not null,
C_PHONE              varchar(15)                    not null,
C_ACCTBAL            decimal(15,2)                  not null,
C_MKTSEGMENT         varchar(10)                    not null,
C_COMMENT            varchar(117)                   not null,
primary key (C_CUSTKEY)
);

テーブルを作成したら、SAP HANA Cloud, HANA データベースインスタンス上で右クリックし、「Import Data」を選択します。

Import Type」ページで、 「Import Data From」を選択します。

Import Source」ステップに進みます。「Import Source」ステップ上で、「Local」を選択し、「File has header in first row」ボックスのチェックを外します

先のダウンロードした 「customer.csv」ファイルを選択します。

Import Target」のステップで、「Add to an existing table」を選択し、作成した TPCH.CUSTOMER テーブルの情報を入力します。

テーブルマッピングを確認し、ステップ5へ進みインポートを終了します。
これが TPCH HANA データベーステーブルへのデータのインポート方法です。

ステップ 3 : リモートサーバーを設定する

次のステップは、SAP HANA Cloud, data lake リレーショナルエンジンから SAP HANA Cloud, HANA データベースへのリモートサーバーの設定です。

取得したいデータを含む SAP HANA Cloud, data lake リレーショナルエンジンと SAP HANA Cloud, HANA データベースインスタンス間のリモートサーバー接続の作成が SAP HANA Cloud, data lake リレーショナルエンジン インスタンスの設定の最初のステップです。

最初に、Database Explorer の SAP HANA Cloud, HANA データベースで右クリックし、コンテキストメニューよりプロパティを選択し、ホスト値をコピーします。

SAP HANA Cloud, HANA データベースにすでにデータをインポートしているので、データ移動のスケジューリングのために SAP HANA Cloud, data lake リレーショナルエンジンの接続の準備に進むことができます。

以下のシンタックスでリモート HANA サーバーを作成し、これから SAP HANA Cloud, data lake リレーショナルエンジンのテーブルに対してデータをロードすることができます。

SAP HANA Cloud, data lake リレーショナルエンジンに直接接続している SQL コンソールを使用してください。(HANA Cloud, data lake リレーショナルエンジンに直接 SQL コンソールで接続する方法はこちらを参考にしてください。)

この SQL を Create Remote server の権限を持つ MANAGE ANY REMOTE SERVER のユーザーを使用して SAP HANA Cloud, data lake リレーショナルエンジンのインスタンスに対して実行します。

リモートサーバーを HDBSERVER と名付けています。<HANA Host Name>  を、プロパティーセクションからコピーしたホストに入れ替えてください。

CREATE SERVER HDBSERVER CLASS 'HANAODBC'
USING
'Driver=libodbcHDB.so;
ConnectTimeout=0;
CommunicationTimeout=15000000;
RECONNECT=0;
ServerNode= <HANA Host Name>:443;
ENCRYPT=TRUE;
ssltruststore= <HANA Host Name>:443;
ssltrustcert=Yes;'
DEFAULT LOGIN 'DBADMIN' IDENTIFIED BY 'Password1';

SAP HANA Cloud, data lake リレーショナルエンジンの CREATE SERVER 文については、こちらのマニュアル(英語)を参照してください。

ステップ 4 : EXTRNLOGIN および LOCAL TEMP TABLE の作成

リモートサーバーが作成されたので、SAP HANA Cloud, data lake リレーショナルエンジン ユーザーを SAP HANA ユーザー認証情報にマップする EXTERNLOGIN を作成し、SAP HANA Cloud, HANA データベースへアクセスできるようにします。

下の CREATE EXTERNLOGIN 文で、SAP HANA Cloud, data lake リレーショナルエンジンのユーザーパーミッションに対して、先に作成した HDBSERVER に HANA ユーザーを使用する権限を付与しています。

下の SQL で使用されている HANA ユーザーが参照する必要のあるオブジェクトに対してアクセスがあることを確認してください。

最初に CUSTOMER テーブルを作成するのに使用した DBADMIN ユーザーを使用することをおすすめします。

<HDL USERNAME> を現在使用している SAP HANA Cloud, data lake リレーショナルエンジンのユーザーに、また <HANA USERNAME> と <HANA PASSWORD> を使用する SAP HANA Cloud, HANA データベースユーザーの情報に置き換えてください。

CREATE EXTERNLOGIN <HDL USER NAME> to HDBSERVER REMOTE LOGIN <HANA USER NAME> IDENTIFIED BY <HANA PASSWORD>;

データが得られることを確認するために、SAP HANA Cloud, HANA データベースの CUSTOMER テーブルをポイントする仮想テーブルを作成します。

すべてが正常にセットアップされていることを確認するため簡単にテストします。HANA のCUSTOMER テーブルをポイントするテンポラリーテーブルを作成します。

CREATE EXISTING LOCAL TEMPORARY TABLE HDLRE_CUSTOMER
(
   C_CUSTKEY            integer                        not null,
   C_NAME               varchar(25)                    not null,
   C_ADDRESS            varchar(40)                    not null,
   C_NATIONKEY          integer                        not null,
   C_PHONE              varchar(15)                    not null,
   C_ACCTBAL            decimal(15,2)                  not null,
   C_MKTSEGMENT         varchar(10)                    not null,
   C_COMMENT            varchar(117)                   not null,
   primary key (C_CUSTKEY)
) AT 'HDBSERVER..TPCH.CUSTOMER';

そのテーブルに対して select 文を実行して、データが得られることを確認します。

SELECT * FROM HDLRE_CUSTOMER;

以下の様な出力でデータが得られることを確認できます。

クリーンアップします。

DROP TABLE HDLRE_CUSTOMER;

DROP SERVER HDBSERVER;

ステップ 5 : イベントスケジューラー

データが得られたので、最後にイベントスケジューラーを使用してデータ/テーブルを非同期にロードします。

SAP HANA Cloud, data lake リレーショナルエンジンには、ビルトインのイベントとイベントスケジューラーが実装されています。

リモートサービスの機能とイベントスケジューラーを活用して、SAP HANA Cloud, HANA データベースから SAP HANA Cloud, data lake リレーショナルエンジンへデータをコピーすることができます。

データの Destination Table を作成することから開始します。

このブログの例では、SAP HANA Cloud, data lake リレーショナルエンジン内の CUSTOMER テーブルだけです。

CREATE TABLE HDLRE_CUSTOMER
(
   C_CUSTKEY            integer                        not null,
   C_NAME               varchar(25)                    not null,
   C_ADDRESS            varchar(40)                    not null,
   C_NATIONKEY          integer                        not null,
   C_PHONE              varchar(15)                    not null,
   C_ACCTBAL            decimal(15,2)                  not null,
   C_MKTSEGMENT         varchar(10)                    not null,
   C_COMMENT            varchar(117)                   not null,
   primary key (C_CUSTKEY)
);

SAP HANA Cloud, data lake リレーショナルエンジンでのイベント作成について順に説明します。

以下の SQL で、 PullDataFromHANA と呼ばれるイベントを作成します。

その後、SchedulePullDataFromHANA というスケジュールを作成します。

ここではスケジューラーを 1:00 AM に開始し、毎週月曜日に繰り返すように設定します。

以下では、「HANDLER」で実行するSQLスクリプトを定義します。

このスクリプトでローカルテンポラリーテーブルを作成し(このテーブルは接続が切断されると削除されます)、このテンポラリーテーブルから、SAP HANA Cloud, data lake リレーショナルエンジン内に保持される HDLRE_CUSTOMER  テーブルにデータを挿入します。

これで、毎週月曜日にこのイベントで SAP HANA Cloud, HANA データベースから、SAP HANA Cloud, data lake リレーショナルエンジンのテーブルにデータがコピーされます。

CREATE EVENT PullDataFromHANA
SCHEDULE SchedulePullDataFromHANA
START TIME '1:00am' ON ('Mon')
HANDLER
BEGIN
	CREATE EXISTING LOCAL TEMPORARY TABLE HDLRE_CUSTOMER_TempTable
	(
	   C_CUSTKEY            integer                        not null,
	   C_NAME               varchar(25)                    not null,
	   C_ADDRESS            varchar(40)                    not null,
	   C_NATIONKEY          integer                        not null,
	   C_PHONE              varchar(15)                    not null,
	   C_ACCTBAL            decimal(15,2)                  not null,
	   C_MKTSEGMENT         varchar(10)                    not null,
	   C_COMMENT            varchar(117)                   not null,
	   primary key (C_CUSTKEY)
	) AT 'HDB_SERVER..TPCH.CUSTOMER';

	INSERT INTO HDLRE_CUSTOMER SELECT * FROM HDLRE_CUSTOMER_TempTable;
END;

イベントをマニュアルで起動して、うまく機能するかどうかテストすることもできます。イベントを起動して、SAP HANA Cloud, data lake リレーショナルエンジンから、Select を実行し、データがコピーされているか確認します。

TRIGGER EVENT PullDataFromHANA;

SELECT * FROM HDLRE_CUSTOMER;

以下のように出力されます。

これで、SAP HANA Cloud, HANA データベースから、SAP HANA Cloud, data lake リレーショナルエンジンへ定期的にデータ移動するイベントが作成されました。

自由な発想で、SAP HANA Cloud, data lake リレーショナルエンジンのイベントを使用して、繰り返し行う SQL タスクを自動化してください!イベントには、正当なものであればあらゆる SQL オペレーションを含めることが可能です。

SAP HANA Cloud, data lake リレーショナルエンジンの CREATE EVENT 文に関しては、こちらのマニュアル(英語)にまとめられています。

まとめ

イベントを作成して、SAP HANA Cloud, HANA データベースから、SAP HANA Cloud, data lake リレーショナルエンジンへのデータ移動をスケジュールする方法について紹介しました。


オリジナルのブログはここまでです。



文章来源: https://blogs.sap.com/2023/12/19/%e3%83%93%e3%83%ab%e3%83%88%e3%82%a4%e3%83%b3%e3%81%ae%e3%82%a4%e3%83%99%e3%83%b3%e3%83%88%e3%82%b9%e3%82%b1%e3%82%b8%e3%83%a5%e3%83%bc%e3%83%a9%e3%83%bc%e3%82%92%e4%bd%bf%e7%94%a8%e3%81%97%e3%81%a6-s/
如有侵权请联系:admin#unsafe.sh