Skip to Content
Technical Articles

SAP HANA Cloudへのデータインポート

本ブログではフラットファイルからSAP HANA Cloudにデータをインポートする方法をご紹介しています。 要件とデータサイズに応じて最適な方法をお選びください。

1GB以下のCSVファイルを手動でインポートする際は、DBeaverをお勧めします。
数GB以上のファイルは「IMPORT FROM」SQL文を活用し、AWSまたはAzureファイルストレージからのインポートが効率的です。 CSV以外のファイルをインポート、データを前処理する必要がある場合は、Pythonが最も柔軟なインポート方法です。 パターンに基づいて、または繰り返し間隔で多数のファイルをインポートする必要がある場合は、SAP HANA Smart Data Integrationファイルアダプターを使用してください。

1. hdbtabledata

SAP Web IDE Full-StackやSAP Business Application Studioのモデリング過程でデータが必要な場合は、10MB以下の.csvファイルをデータベースプロジェクトに直接配置できます。
インポートする.csvファイルをHDIコンテナの定義フォルダーに配置し、同じフォルダーに.hdbtabledataファイルで インポートに必要な情報をを定義します。

Gitを使用する際はサイズ制限にご注意ください、ほとんどのGitリポジトリにはサイズの制限があります。
Gitリポジトリ内にも、SAP Web IDEのプロジェクト内にも、10MB以上のファイルを格納することは推奨しません。

手順を説明するブログ ・ サンプルプロジェクト

2. SAP HANA Database Explorer

SAP HANA Database Explorerのデータインポート機能を活用し、最大200MBのCSVファイルをローカルPCからインポートできます。そして、直接AWS S3とAzureからファイルをインポートすることも可能です!

SAP Cloud PlatformコックピットのSAP HANA Cloudインスタンスからデータベースエクスプローラーにアクセスします。

SAP HANA Database Explorer内で、HDIコンテナーの一覧画面が表示されます。
データをインポートする対象のデータベース/ HDIコンテナを右クリックし、「Import Data」を選択します。

「Import Data」ウィザードが開きます。
Import data Fromの項目でLocal, Amazon S3, Azureから選択します。
Localの場合、CSVファイルを選択してからインポート対象のテーブルを選択します。対象カラムを確認したらインポート開始です!

Amazon S3やAzureからファイルをインポートする場合は、事前にIaaSの証明書を登録する必要があります。詳細は本ブログの 5. “IMPORT FROM” SQL statement章でご確認ください。

Amazon S3の場合はS3 Region、およびS3 pathを入力します。
S3 Pathはaccess key, secret key, bucket name, object IDをGUIに入力すると作られます。

次に、対象テーブルを選択します。

インポートオプションでファイル形式をCSV、PARQUETから選択し、カラム名、区切り、日付形式などを設定します。

エラーハンドリングで予想外のデータが含まれている場合の挙動を定義し、インポート開始!

3. DBeaver

SAP HANA Cloudをデータウェアハウスとして使用している場合、個人的にはDBeaverでデータを管理することをお勧めします。データアクセス、クエリや簡易的なデータ可視化が直感的にできます!
DBeaverにはユーザーがCSVファイルからデータをインポートする非常に使いやすいデータインポート機能もあります。

まず、DBeaverからSAP HANA Cloudへの接続を確立してください。
次に、データをインポートするスキーマを右クリックして、[Import Data]を選択します。

ウィザードに従って、インポートするデータを選択します。

下記の例では、1019925レコード、100MBのKaggleのサンプルデータセットを使用しています。

インポート設定を行います。

テーブルマッピングはデフォルトのままでもインポート可能ですが、手動で変更することも可能です。新規テーブルにインポートする場合はDBeaverがSAP HANA Cloudに新しいテーブルを自動的に作成してくれます。

上記が私がインポートしたCSVファイルに基づいて、デフォルトで検出されたカラムです。

データ転送オプションでは、インポートされるデータをコミットする頻度を決められます。
大きなファイルの場合は頻繁にコミットするとインポート時間に影響を与えます。

データインポートの情報が表示されます。設定に問題なければ[start]ボタンを押して実行。

私の環境では、SAP HANA Cloudへ100MB CSV fileのインポートが4分で完了しました。
同じ環境から同じファイルをローカルのSAP HANA 2.0 SPS05へのインポートは12秒で完了しました。

4. Python

SAP HANA Cloudへデータをインポートする前に、事前処理が必要な場合もあります。
Pythonでは加工に必要なツールやライブラリーがたくさん揃っているため、使いやすいかと思います。

DBeaverの例と同じ100MBのCSVファイルを使用してインポート速度を比較しました。
まず、CSVファイルが置かれているディレクトリに新しいJupyter notebookを作成します。

  1. jupyter notebookで、hana_mlライブラリをインポートすることから始めます。
  2. ConnectionContextでSAP HANACloudへの接続を確立します
  3. pandasでCSVファイルを読みます。
  4. データを含むデータフレームをSAP HANA Cloudデータベースに作成します。
  5. 最後に接続を閉じます。

今回のPythonコードが下記です。
HANA MLデータフレームを使用すると、開発者はHANAのデータをpandasのデータフレームと同様に扱えます。要件に合わせて柔軟にデータを加工できます。
SAP HANAでのデータ準備・加工・活用の例をこちらのブログでAndreasさんがご紹介しています。

!pip install hana_ml

import hana_ml
print(hana_ml.__version__)

import hana_ml.dataframe as dataframe

# Instantiate connection object
conn = dataframe.ConnectionContext(address = 'hostname.hanacloud.ondemand.com',
                                   port = 443, 
                                   user = 'user', 
                                   password = 'password',
                                   encrypt = 'true'
                                  )

# Send basic SELECT statement and display the result
sql = 'SELECT 12345 FROM DUMMY'
df_remote = conn.sql(sql)
print(df_remote.collect())

import pandas as pd
df_data = pd.read_csv('NYCFT.csv', sep = ',')
df_data.head(5)

df_remote = dataframe.create_dataframe_from_pandas(connection_context = conn, 
                                                   pandas_df = df_data, 
                                                   table_name = 'NYCFT_PYTHON',
                                                   force = True,
                                                   replace = False)

conn.close()

Pythonによるデータのインポートは9分で完了しました。
DBeaverを介したデータインポートよりPythonが約2倍遅い:他の例でも同様の結果です
hana_mlライブラリを使用して、簡単な方法でデータをインポートしましたが、SQLAlchemyなどの他のpythonライブラリを使用することもできます。

5. “IMPORT FROM” SQL statement

データセットが非常に大きい場合、HANA Cloudにデータをインポートする最も速い方法は組み込みの「IMPORT FROM」SQL文を使用することです。
ドキュメントに従って、IaaSプラットフォームから直接データをインポートできるようにします。

本ブログでは、AWSの設定方法をご紹介します。
まず、S3が有効になっているAWSアカウントが必要であり、ファイルをS3にアップロードする必要があります。 DBeaverとPythonの例と同じファイルを使用して速度を比較しました。

AWSコンソールのIAMセクションで、APIアクセス権を持つユーザーを作成し、アクセスキーIDとシークレットアクセスキーを受け取ります。

IAMユーザーに必要なアクセス許可を付与します。
AmazonS3ReadOnlyAccessポリシーをユーザーに付与しました。このポリシーにより、S3上のすべてのファイルに読み込みアクセスできます。必要に応じてより細かいアクセスを許可することもできます。

次に、S3へのSSL接続に必要な証明書を登録する必要があります

REST APIベースのアダプターは、HTTPクライアントを介してエンドポイントと通信します。安全な通信を確保するために、アダプターはエンドポイントサービスからのクライアント証明書を必要とします。 hanaodbcアダプターに基づくSAP HANA Cloudインスタンスへの接続にも、SSL証明書が必要です。 AWS S3に接続するために必要な証明書は下記の2つです。

各ルート証明書のテキストをコピーし、テキストから証明書を作成し、パーソナルセキュリティ環境(PSE)に保存できます。
下記のSQL文をHANA CloudのSQLコンソールで実行してください:

  • PSE作成
create pse HTTPS;
  • 証明書作成
CREATE CERTIFICATE FROM '
-----BEGIN CERTIFICATE-----
... 
-----END CERTIFICATE-----
' COMMENT <comment>; 

作成された証明書はCERTIFICATESシステムビューに格納され、PSEストアに追加できます。

  • 証明書をPSEに追加
SELECT CERTIFICATE_ID FROM CERTIFICATES WHERE COMMENT = '<comment>'; 
ALTER PSE <pse_name> ADD CERTIFICATE <certificate_id>;
  • PSEの使用目的をREMOTE SOURCEに設定
SET PSE <pse_name> PURPOSE REMOTE SOURCE;

REMOTE SOURCE使用目的により、PSEストア内の証明書をすべてのリモートソースで使用できるようになります。

PSEの設定が完了したら、下記のSQL文でAWS S3からのインポートが可能になります。
IMPORT FROM CSV FILE 's3-<region>://<access_key>:<secret_key>@<bucket_name>/<object_id>.csv' INTO <TARGET_TABLE_NAME> [with options];

100MBのCSVファイルでは、AWS S3からのインポートが34秒で完了しました。

 

本ブログでご紹介していないインポート方法にはSAP HANA Smart Data Integration File adapter、 hdbsqlJDBC/ODBCなどもあります。

特に、SAP HANA SDI File adapterは下記の要件に対して有効です。

  • SharePoint access
  • SharePoint on Office365
  • パターンベースの読み込み、定義されたパターンに一致するファイルのみを定期的にSAP HANA Cloudにインポートする
  • ファイルからのリアルタイム複製(APPENDのみ)

 

結論として、各ファイルのインポート方法には、用途に応じて一長一短があります。
最後まで読んでいただきありがとうございました。

Maxime SIMON

Be the first to leave a comment
You must be Logged on to comment or reply to a post.