SAP HANA Cloud, data lakeリレーショナルエンジンで非同期でテーブルをロードする
作成者:伊藤 沢 投稿日:2023年5月10日
このブログは、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をダウンロードする
- SAP HANA Cloud, HANAデータベースインスタンス/テーブルにデータをIMPORTするために、このGitHub リポジトリより、TPCHデータファイルをダウンロードします。リンクをクリックすると、GitHubデータファイルに直接リダイレクトされるので、そこからダウンロードすることができます。
- このブログでは、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リレーショナルエンジンへのデータ移動をスケジュールする方法について紹介しました。
このオリジナルブログが掲載されているSAP CommunityのSybase関連タグをフォローして、最新技術情報をキャッチアップしてください(フォローには登録が必要です)。
SAP Communityの関連タグ
・SAP HANA Cloud, data lake ブログ / Q&A
・SAP IQ ブログ / Q&A
・SAP SQL Anywhere ブログ / Q&A
SAP Communityでは質問も投稿することが可能で、世界中のSAP社員やユーザーのアドバイスを受けることができます。
———————————————————
SAPジャパンブログ内関連記事:
SAP HANA Cloud, data lake
SAP HANA Cloud, data lake 2022年12月版、2023年3月版、6月版の主な新機能
SAP HANA Cloudの「マルチ環境」のサポートとSAP HANA CloudのKyma環境からの使用
SAP HANA Cloud : データレイクおよびデータティアリング(階層化)概要
SAP IQシステムからSAP HANA Cloud, data lake (Standalone Data Lake) へ移行する理由トップ5
SAP IQまたは、SAP HANA Cloud, data lakeリレーショナルエンジンのインスタンスから別のインスタンスへログインをコピーする
SAP HANA Cloud, data lakeリレーショナルエンジンで非同期でテーブルをロードする
Jupyter NotebookとPySparkでSAP HANA Cloud, data lake Filesを使用する
SAP HANA Cloud, data lakeストレージのオブジェクトストレージへの変更によるパフォーマンス向上とペタバイト規模データの対応およびコスト低減
SAP HANA Cloud, data lakeでマテリアライズドビューを使用してパフォーマンスを上げる
SAP HANA Cloud, SAP HANA データベースとSAP HANA Cloud, data lake filesを使用する
SAP HANA Cloud, HANA データベースからSAP HANA Cloud, data lakeデータベースへの最速のデータ移行方法とテスト結果
SAP HANA Cloud, HANAデータベースから HANA Cloud, data lakeへのデータの高速移行とデータ移行速度に影響するパラメーター
SAP HANA Cloud, data lakeとSAP IQに共通するヒストリカルデータベースとDBSpaceサイズのキャプチャー方法
SAP HANA Cloud, data lake(IQ)をベースにしたNode.jsアプリケーションの構築
複数のSAP HANAソースからのデータを1つのSAP HANA Cloud, data lake(IQ)に集約する
SAP HANA Cloud, data lake Filesへの最初のアクセス設定
SAP HANA Cloud, data lakeおよびSAP IQにおけるスキーマのエクスポート/バックアップ
SAP HANA Cloud, data lake(IQ)にWindows端末からPythonで直接接続する
SAP HANA Cloud, data lakeへのデータロードにおけるvCPU数の影響
SAP IQのクラウドサービスが開始されました – SAP HANA Cloud, data lake (Standalone IQ)
SAP IQ
SAP IQのクラウドサービスが開始されました – SAP HANA Cloud, Data Lake (Standalone IQ)
SAP IQ – 隠れたイッピン(the hidden treasure) …
全てのSAP BW、SAP BW/4HANAリリースのSAP ニアラインストレージ(NLS)ソリューション – SAP IQ
SAP IQによるSAP ニアラインストレージ(NLS)のパフォーマンスを向上させる
SAP IQを利用したSAP Information Lifecycle Management(ILM)
DBA CockpitでSAP IQを有効にする
SAP IQのための容易なインストーラー - 「Q」
列指向データベースでもOLTPに対応したSAP Sybase IQ16の機能拡張
大量データの「圧縮率」と「ロード時間」を改善したSAP Sybase IQ16の技術解説
SAP IQ 16.1 SP05がリリースされました
SAP ASE
SAP ASE 16.0 SP03による高可用性(HA)+災害復旧(DR)の3ノードHADR
カスタム開発のアプリケーションにおけるSAP ASE Always-on機能へのDRノードの追加(パート 1) (パート 2) (パート 3)
SAP ASE 16.0 SP04の新機能
SAP ASEの新しい管理ツール「AMC」の紹介:インストール方法、メモリー管理、ワークロード分析機能、Workload AnalyzerのSSL設定について
SAP HANAプラットフォームを相互補完し進化する旧Sybase製品の今――SAP ASEとSAP IQ
SAPアプリケーション向けデータベースとしてSAP Sybase ASEが採用される理由とは
RDBMSのパフォーマンス向上の仕掛け――SAP Sybase ASE 15.7の最新アーキテクチャー解説
オンラインマニュアル:
SAP HANA Cloud
SAP HANA Cloud, Data Lake (SAP HANA DB-Managed)
SAP HANA Cloud, Data Lake (Standalone)
SAP Datasphereスペースを SAP HANA Cloud, data lakeに接続して、大量のデータを保存または利用できます。
SAP IQ
SAP SQL Anywhere(日本語)/(最新英語)
SAP ASE
SAP Community (ブログ/ Q&A) :
SAP HANA Cloud, data lake
SAP IQ
SAP SQL Anywhere (日本語ブログ一覧ページ)
SAP ASE
SAP Community Wiki:
SAP IQ
SAP SQL Anywhere
SAP ASE
sap.com 製品ページ:
SAP HANA Cloud, data lake
データレイクとは
SAP IQ
SAP SQL Anywhere(サブページ)
SAP ASE
デベロッパー向けチュートリアル
SAP HANA Cloud, data lake
その他:
SAP IQ テクニカル概要
SAP IQ 16.0 ハードウェアサイジングガイド
様々なストレージおよびネットワークテクノロジーにおける SAP IQ 16 Multiplex のパフォーマンス評価