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: 
Sawa_Ito
Product and Topic Expert
Product and Topic Expert
0 Kudos

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




このブログは、danielsblog01 が執筆したブログ「Aggregate Data from Multiple SAP HANA Sources to One SAP HANA Cloud, HANA data lake IQ(2021 年 8 月 5 日)の抄訳です。最新の情報は、SAP Communityの最新ブログマニュアルを参照してください。

 






SAP HANA Cloud により、ハイブリッドのランドスケープ(オンプレミスシステムがクラウドシステムズの連携)が容易に実現できるようになりました。

しかしながら、集約したデータ分析を行う場合には、データのタイプと機能の一貫性を保つために興味のあるデータを単一のソースで持つ方が容易な場合があります。

これからそれを SAP HANA Cloudデータベースとリモート接続で見ていきます。複数の HANAインスタンスから SAP HANA Cloud, data lake へのデータ移動は、単一の SQL コンソールで行うことができます!

これから、オンプレミスの HANA システムと SAP HANA Cloud の HANA データベースから単一の SAP HANA Cloud, data lake にデータを持っていきます。
SAP HANA Cloud の HANAデータベース、SAP HANA データベース、そして接続された SAP HANA Cloud, data lake のランドスケープからスタートします。

オンプレミスの SAP HANA データベースを SAP HANA Cloud, HANA データベースへ接続する方法の詳細については、こちらを参照してください。

 



 

今回の計画

今回の計画は、データを集約し、SAP HANA Cloud, HANA Cloud の仮想テーブルを使用して SAP HANA Cloud, data lake に移動させることです。
その後、SAP HANA Cloud, HANA データベースコンソールから EXPORT 文を使用して Amazon S3 にデータをエクスポートします。エクスポート後、SAP HANA Cloud, data lake インスタンスに LOAD table 文でデータをロードします。

 

仮想テーブルの作成

SAP HANA Cloud, HANA データベースからオンプレミスの SAP HANA データベースへのリモート接続はすでに確立されていると仮定します。
その後、仮想テーブルの作成は SAP Database Explorer で行うことができます。



 

テーブルが作成されると、データベースカタログ内でそれらを確認することができます。



 

エクスポートおよびインポートクエリー

この複数のインスタンスから SAP HANA Cloud, data lake にデータを移動させる方法の最も優れた点は、単一の SQL コンソールから1回の実行で行えることです!

余談: このブログでは、データのエクスポート先として Amazon S3 を使用していますが、SAP HANA Cloud, data lake file ストアを使用して、エクスポートをサポートすることが計画されています(注:翻訳時すでに実装済です)。
これにより、2つのことが可能になります。まず 1 つ目は、load table 文でデータをロードする場合にファイルストアをテンポラリのロケーションとして使用することができる点です。2 つ目は、ファイルストアにデータを格納し、SQL on Files を使用してこれにクエリーを投げることができることです。データの値によって選択することができます。

以下が、SQL コンソールからの export  文です。

-- TABLES FROM ON-PREMISE HANA

EXPORT INTO 's3-eu-central-1://<ACCESS KEY>:<secret access key>@<bucket name>/mydir/customer_blog.csv' FROM HXE_CUSTOMER;

EXPORT INTO 's3-eu-central-1://<ACCESS KEY>:<secret access key>@<bucket name>/mydir/lineitem_blog.csv' FROM HXE_LINEITEM;

EXPORT INTO 's3-eu-central-1://<ACCESS KEY>:<secret access key>@<bucket name>/mydir/nation_blog.csv' FROM HXE_NATION;

EXPORT INTO 's3-eu-central-1://<ACCESS KEY>:<secret access key>@<bucket name>/mydir/orders_blog.csv' FROM HXE_ORDERS;



-- TABLES FOM HANA CLOUD DATABASE

EXPORT INTO 's3-eu-central-1://<ACCESS KEY>:<secret access key>@<bucket name>/mydir/partsupp_blog.csv' FROM PARTSUPP_CS;

EXPORT INTO 's3-eu-central-1://<ACCESS KEY>:<secret access key>@<bucket name>/mydir/part_blog.csv' FROM PART_CS;

EXPORT INTO 's3-eu-central-1://<ACCESS KEY>:<secret access key>@<bucket name>/mydir/supplier_blog.csv' FROM SUPPLIER_CS;

EXPORT INTO 's3-eu-central-1://<ACCESS KEY>:<secret access key>@<bucket name>/mydir/region_blog.csv' FROM REGION_CS;


 

ご覧のとおり、このステートメントは比較的反復的で、仮想テーブルのエクスポートと HANA テーブルのエクスポートと構文上の違いはありません。
何等かのテンポラリーストレージ先と、データの入ったテーブルが必要です。
次に、REMOTE_EXECUTE プロシージャーを使用して、LOAD table 文を SAP HANA Cloud, data lake にプッシュします。

-- LOAD TABLE FROM EXPORT

CALL SYS.REMOTE_EXECUTE('HDL',

	'LOAD TABLE REGION(

	   R_REGIONKEY,

	   R_NAME,

	   R_COMMENT

	)

	USING FILE ''s3://<bucket_name>/mydir/region_blog.csv''

	DELIMITED BY ''|''

	FORMAT CSV

	ACCESS_KEY_ID ''<access_key>''

	SECRET_ACCESS_KEY ''<secret_access_key>''

	REGION ''eu-central-1''

	ESCAPES OFF

	QUOTES OFF;



	LOAD TABLE CUSTOMER(

	   C_CUSTKEY,

	   C_NAME,

	   C_ADDRESS,

	   C_NATIONKEY,

	   C_PHONE,

	   C_ACCTBAL,

	   C_MKTSEGMENT,

	   C_COMMENT

	)

	USING FILE ''s3://<bucket_name>/mydir/customer_blog.csv''

	DELIMITED BY ''|''

	FORMAT CSV

	ACCESS_KEY_ID ''<access_key>''

	SECRET_ACCESS_KEY ''<secret_access_key>''

	REGION ''eu-central-1''

	ESCAPES OFF

	QUOTES OFF;



	LOAD TABLE NATION(

	   N_NATIONKEY,

	   N_NAME,

	   N_REGIONKEY,

	   N_COMMENT

	)

	USING FILE ''s3://<bucket_name>/mydir/nation_blog.csv''

	DELIMITED BY ''|''

	FORMAT CSV

	ACCESS_KEY_ID ''<access_key>''

	SECRET_ACCESS_KEY ''<secret_access_key>''

	REGION ''eu-central-1''

	ESCAPES OFF

	QUOTES OFF;



	LOAD TABLE SUPPLIER(

	   S_SUPPKEY,

	   S_NAME,

	   S_ADDRESS,

	   S_NATIONKEY,

	   S_PHONE,

	   S_ACCTBAL,

	   S_COMMENT

	)

	USING FILE ''s3://<bucket_name>/mydir/supplier_blog.csv''

	DELIMITED BY ''|''

	FORMAT CSV

	ACCESS_KEY_ID ''<access_key>''

	SECRET_ACCESS_KEY ''<secret_access_key>''

	REGION ''eu-central-1''

	ESCAPES OFF

	QUOTES OFF;



	LOAD TABLE CUSTOMER(

	   C_CUSTKEY,

	   C_NAME,

	   C_ADDRESS,

	   C_NATIONKEY,

	   C_PHONE,

	   C_ACCTBAL,

	   C_MKTSEGMENT,

	   C_COMMENT

	)

	USING FILE ''s3://<bucket_name>/mydir/customer_blog.csv''

	DELIMITED BY ''|''

	FORMAT CSV

	ACCESS_KEY_ID ''<access_key>''

	SECRET_ACCESS_KEY ''<secret_access_key>''

	REGION ''eu-central-1''

	ESCAPES OFF

	QUOTES OFF;



	LOAD TABLE ORDERS(

	   O_ORDERKEY,

	   O_CUSTKEY,

	   O_ORDERSTATUS,

	   O_TOTALPRICE,

	   O_ORDERDATE,

	   O_ORDERPRIORITY,

	   O_CLERK,

	   O_SHIPPRIORITY,

	   O_COMMENT

	)

	USING FILE ''s3://<bucket_name>/mydir/orders_blog.csv''

	DELIMITED BY ''|''

	FORMAT CSV

	ACCESS_KEY_ID ''<access_key>''

	SECRET_ACCESS_KEY ''<secret_access_key>''

	REGION ''eu-central-1''

	ESCAPES OFF

	QUOTES OFF;



	LOAD TABLE PART(

	   P_PARTKEY,

	   P_NAME,

	   P_MFGR,

	   P_BRAND,

	   P_TYPE,

	   P_SIZE,

	   P_CONTAINER,

	   P_RETAILPRICE,

	   P_COMMENT

	)

	USING FILE ''s3://<bucket_name>/mydir/part_blog.csv''

	DELIMITED BY ''|''

	FORMAT CSV

	ACCESS_KEY_ID ''<access_key>''

	SECRET_ACCESS_KEY ''<secret_access_key>''

	REGION ''eu-central-1''

	ESCAPES OFF

	QUOTES OFF;



	LOAD TABLE LINEITEM(

	   L_ORDERKEY,

	   L_PARTKEY,

	   L_SUPPKEY,

	   L_LINENUMBER,

	   L_QUANTITY,

	   L_EXTENDEDPRICE,

	   L_DISCOUNT,

	   L_TAX,

	   L_RETURNFLAG,

	   L_LINESTATUS,

	   L_SHIPDATE,

	   L_COMMITDATE,

	   L_RECEIPTDATE,

	   L_SHIPINSTRUCT,

	   L_SHIPMODE,

	   L_COMMENT

	)

	USING FILE ''s3://<bucket_name>/mydir/lineitem_blog.csv''

	DELIMITED BY ''|''

	FORMAT CSV

	ACCESS_KEY_ID ''<access_key>''

	SECRET_ACCESS_KEY ''<secret_access_key>''

	REGION ''eu-central-1''

	ESCAPES OFF

	QUOTES OFF;



	LOAD TABLE PARTSUPP(

	   PS_PARTKEY,

	   PS_SUPPKEY,

	   PS_AVAILQTY,

	   PS_SUPPLYCOST,

	   PS_COMMENT

	)

	USING FILE ''s3://<bucket_name>/mydir/partsupp_blog.csv''

	DELIMITED BY ''|''

	FORMAT CSV

	ACCESS_KEY_ID ''<access_key>''

	SECRET_ACCESS_KEY ''<secret_access_key>''

	REGION ''eu-central-1''

	ESCAPES OFF

	QUOTES OFF;

END');


 

この SQL コードを全て単一のコンソールから実行することができ、データを 1 つのスタンドアロン SAP HANA Cloud, data lake インスタンスに集約することができました!

これで終了です。

これが複数の SAP HANAシステムから SAP HANA Cloud, data lake に大量データを移動する方法です。

もう一つのアプローチは、SELECT…INSERT 文を使用する方法で、以下を参照してください。データが大量の場合には、SELECT…INSERT の方法は、パフォーマンスの観点で最適でない可能性があることに注意してください。

INSERT INTO <HDL_TABLE> (SELECT * FROM <HANA_TABLE>);


 

結論

複数のリモートソースからデータを集約し、一つの SQL コンソールから SAP HANA Cloud, data lake にロードすることができます。

これは、テンポラリーストレージとしてオブジェクトストアを使用することで行うことができます。これにより分析用データは一つのソースに統合することができます。
これが、SAP HANA Cloud, data lake の 1 つの長所です。シンプルで効果的です !




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