Technology Blogs by SAP
Learn how to extend and personalize SAP applications. Follow the SAP technology blog for insights into SAP BTP, ABAP, SAP Analytics Cloud, SAP HANA, and more.
cancel
Showing results for 
Search instead for 
Did you mean: 
former_member439824
Contributor

本ブログではフラットファイルから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のデータインポート機能を活用し、ESRI Shapefileと最大1GBのCSVファイルをローカルPCからインポートできます。
直接AWS S3とAzureからCSV / Parquet / Shapefileファイルをインポートすることも可能です。

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

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


IMPORT TYPEとして、Data (CSVファイル)、又はESRI Shapefileを選択します。



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のみ)



Using SDI FileAdapter to write to Azure file shareで、SDI File adapterの使い方を詳しく説明しています。

 


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

Maxime SIMON