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のデータインポート機能を活用し、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ファイルからデータをインポートする非常に使いやすいデータインポート機能もあります。
データ転送オプションでは、インポートされるデータをコミットする頻度を決められます。
大きなファイルの場合は頻繁にコミットするとインポート時間に影響を与えます。
私の環境では、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を作成します。
- jupyter notebookで、hana_mlライブラリをインポートすることから始めます。
- ConnectionContextでSAP HANACloudへの接続を確立します。
- pandasでCSVファイルを読みます。
- データを含むデータフレームをSAP HANA Cloudデータベースに作成します。
- 最後に接続を閉じます。
今回の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とシークレットアクセスキーを受け取ります。
AmazonS3ReadOnlyAccessポリシーをユーザーに付与しました。このポリシーにより、S3上のすべてのファイルに読み込みアクセスできます。必要に応じてより細かいアクセスを許可することもできます。
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ストア内の証明書をすべてのリモートソースで使用できるようになります。
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、 hdbsqlや JDBC/ODBCなどもあります。
特に、SAP HANA SDI File adapterは下記の要件に対して有効です。
- SharePoint access
- SharePoint on Office365
- パターンベースの読み込み、定義されたパターンに一致するファイルのみを定期的にSAP HANA Cloudにインポートする
- ファイルからのリアルタイム複製(APPENDのみ)
最後まで読んでいただきありがとうございました。
Maxime SIMON