このブログは、2022 年 11 月 17 日に SAP ジャパン公式ブログに掲載されたものを SAP ジャパン公式ブログ閉鎖に伴い転載したものです。
このブログは、douglas.hoover が執筆したブログ「The fastest way to load data from HANA Cloud, HANA into HANA Cloud, HANA Data Lake(2022 年 3 月 8 日)の抄訳です。オリジナルのブログページでのコメントのやりとりなどもぜひご参照ください。
最新の情報は、SAP Community の最新ブログやマニュアルを参照してください。
このブログは、SAP HANA データ戦略ブログシリーズの1つです。
https://blogs.sap.com/2019/10/14/sap-hana-data-strategy/
SAP HANA Cloud の HANA データベースから SAP HANA Cloud, data lake リレーショナルエンジンにより大きなテーブルを移動するお客様が増えるにつれ、SAP HANA Cloud の HANA データベースから SAP HANA Cloud, data lake リレーショナルエンジンへのデータ移動の最速の方法について聞かれるようになりました。
より正確にいうと、SAP HANA Cloud, data lake リレーショナルエンジン仮想テーブルに対してシンプルに HANA INSERT を実行するよりも高速な方法があるのか聞かれるようになりました。
なぜ SAP HANA Cloud の HANA データベースから SAP HANA Cloud, data lake リレーショナルエンジンに大きなテーブルを移動するお客様がいるのか疑問に思う方もいるかもしれません。
最もよくある利用ケースは、大きなデータベースの最初のマテリアライズあるいは古いデータをSAP HANA Cloud, data lake リレーショナルエンジンにアーカイブするためです。
これらのお客様の大半は、通常 SAP HANA Smart Data Integration (SDI) を使用してこのマテリアライゼーションを行っており、これらのテーブルを最新の状態にキープするために SDI の Flowgraphs や SDI のリアルタイムレプリケーションを使用した Change Data Capture を同じインターフェースを使用して行っています。
SAP HANA SDI の詳細については以下のブログを参照してください:
SAP HANA データ戦略: リアルタイム Change Data Capture を含む高速データ投入(英語)
https://blogs.sap.com/2020/06/18/hana-data-strategy-data-ingestion-including-real-time-change-data-c...
SAP HANA データ戦略: 高速データ投入 – 仮想化(英語)
https://blogs.sap.com/2020/03/09/hana-data-strategy-data-ingestion-virtualization/
ここで実験するデータ移動に関するシンプルな方法は以下の 3 種です:
こう質問する人もいるかもいれません:
「なぜ SAP HANA Cloud, HANA データベース経由で行うのか?」
「なぜ SAP HANA Cloud, data lake リレーショナルエンジンに直接データをロードしないのか?」
繰り返しますが、これらのお客様はターゲットとして HANAオブジェクト(ローカルまたは仮想)を必要とする HANA Enterprise Information Management (EIM)ツールを使用しています。
将来のブログでは、SAP IQ クライアントサイドロード、Data Services、Data Intelligence 経由の SAP HANA Cloud, data lake リレーショナルエンジンへの直接のデータロードについて説明したいと思います。
SAP HANA Cloud, HANA データベースから SAP HANA Cloud, data lake リレーショナルエンジンへの最速のデータロード方法は、SAP HANA Cloud, data lake リレーショナルエンジンから、SAP HANA Cloud, HANA データベースの物理テーブルを指定するプロキシテーブルを作成するために「create existing local temporary table」を使用して HANA テーブルから SELECT で INSERT 文を実行する方法です。
(詳細は以下のテーブル参照)
方法 | 行 | データサイズ | 時間 (秒) |
HANA Cloud, data lake/IQ INSERT..SELECT | 28,565,809 | 3.3 GB | 52.86 |
*HANA Cloud, data lake/IQ LOAD Azure ファイルシステム | 28,565,809 | 3.3 GB | 116 (1分56秒) |
*HANA Cloud, data lake/IQ LOAD Data Lake ファイルシステム | 28,565,809 | 3.3 GB | 510 (8分30秒) |
HANA INSERT..SELECT | 28,565,809 | 3.3 GB | 1277 (21分7秒) |
* HANA データベースからファイルシステムへのデータエクスポート時間は含めていません。
28,565,809 行、約 3.3 GB の TPC-D ORDERS テーブルを使用し、SAP HANA Cloud, data lake リレーショナルエンジンの小さめの設定でロードしています。
SAP HANA Cloud, HANA データベース:60 GB / 200 GB、4 vCPU
SAP HANA Cloud, data lake リレーショナルエンジン:16 TB、ワーカー 8 vCPU /コーディネーター 8 vCPU
SAP HANA Cloud, data lake リレーショナルエンジンでは、より多くの並列処理を実行するには(特により大きなテーブルの場合)より多くの vCPU 数を設定します。
より多くの TB を SAP HANA Cloud, data lake リレーショナルエンジンに追加することで、より大きなディスク I/O スループットを得ることができます。
SAP HANA Cockpit をスタートして SAP HANA Cloud を管理します。
SAP HANA Cloud, data lake リレーショナルエンジンから「Open in SAP HANA Database Explorer」を選択します。
もしこれが初回であれば、SAP HANA Cloud, data lake リレーショナルエンジンの ADMIN パスワードを求められます。
SQL コマンドを入力し、クリックして実行します。
CREATE SERVER
–DROP SERVER DRHHC2_HDB
CREATE SERVER DRHHC2_HDB CLASS ‘HANAODBC’ USING ‘Driver=libodbcHDB.so;ConnectTimeout=60000;ServerNode=xyxy.hana.prod-us10.hanacloud.ondemand.com:443;ENCRYPT=TRUE;ssltruststore=xyxy.hana.prod-us10.hanacloud.ondemand.com;ssltrustcert=Yes;UID=DBADMIN;PWD=xyxyx;’
CREATE TARGET TABLE
CREATE TABLE REGIONPULL (
R_REGIONKEY bigint not null,
R_NAME varchar(25) not null,
R_COMMENT varchar(152) not null,
primary key (R_REGIONKEY)
);
CREATE local temporary PROXY
create existing local temporary table REGION_PROXY (
R_REGIONKEY bigint not null,
R_NAME varchar(25) not null,
R_COMMENT varchar(152) not null,
primary key (R_REGIONKEY)
)
at ‘DRHHC2_HDB..TPCD.REGION’;
INSERT DATA
INSERT into REGIONPULL SELECT * from REGION_PROXY;
Commit;
–1.9s
–DROP TABLE ORDERSPULL;
create table ORDERSPULL (
O_ORDERKEY BIGINT not null,
O_CUSTKEY BIGINT not null,
O_ORDERSTATUS VARCHAR(1) not null,
O_TOTALPRICE DECIMAL(12,2) not null,
O_ORDERDATE DATE not null,
O_ORDERPRIORITY VARCHAR(15) not null,
O_CLERK VARCHAR(15) not null,
O_SHIPPRIORITY INTEGER not null,
O_COMMENT VARCHAR(79) not null,
primary key (O_ORDERKEY)
);
create existing local temporary table ORDERS_PROXY (
O_ORDERKEY BIGINT not null,
O_CUSTKEY BIGINT not null,
O_ORDERSTATUS VARCHAR(1) not null,
O_TOTALPRICE DECIMAL(12,2) not null,
O_ORDERDATE DATE not null,
O_ORDERPRIORITY VARCHAR(15) not null,
O_CLERK VARCHAR(15) not null,
O_SHIPPRIORITY INTEGER not null,
O_COMMENT VARCHAR(79) not null
)
at ‘DRHHC2_HDB..TPCD.ORDERS’;
INSERT into ORDERSPULL SELECT * from ORDERS_PROXY;
Commit;
–59s
–52.86 s
SELECT COUNT(*) FROM ORDERSPULL;
–28,565,809
create table LINEITEM (
L_ORDERKEY BIGINT not null,
L_PARTKEY BIGINT not null,
L_SUPPKEY BIGINT not null,
L_LINENUMBER INTEGER not null,
L_QUANTITY DECIMAL(12,2) not null,
L_EXTENDEDPRICE DECIMAL(12,2) not null,
L_DISCOUNT DECIMAL(12,2) not null,
L_TAX DECIMAL(12,2) not null,
L_RETURNFLAG VARCHAR(1) not null,
L_LINESTATUS VARCHAR(1) not null,
L_SHIPDATE DATE not null,
L_COMMITDATE DATE not null,
L_RECEIPTDATE DATE not null,
L_SHIPINSTRUCT VARCHAR(25) not null,
L_SHIPMODE VARCHAR(10) not null,
L_COMMENT VARCHAR(44) not null,
primary key (L_ORDERKEY,L_LINENUMBER)
);
create existing local temporary table LINEITEM_PROXY (
L_ORDERKEY BIGINT not null,
L_PARTKEY BIGINT not null,
L_SUPPKEY BIGINT not null,
L_LINENUMBER INTEGER not null,
L_QUANTITY DECIMAL(12,2) not null,
L_EXTENDEDPRICE DECIMAL(12,2) not null,
L_DISCOUNT DECIMAL(12,2) not null,
L_TAX DECIMAL(12,2) not null,
L_RETURNFLAG VARCHAR(1) not null,
L_LINESTATUS VARCHAR(1) not null,
L_SHIPDATE DATE not null,
L_COMMITDATE DATE not null,
L_RECEIPTDATE DATE not null,
L_SHIPINSTRUCT VARCHAR(25) not null,
L_SHIPMODE VARCHAR(10) not null,
L_COMMENT VARCHAR(44) not null
)
at ‘DRHHC2_HDB..TPCD.LINEITEM’;
INSERT into LINEITEM SELECT * from LINEITEM_PROXY;
Commit;
— Rows affected: 114,129,863
— Client elapsed time: 4 m 52 s
SAP HANA Cloud, HANA データベースから SAP HANA Cloud, data lake リレーショナルエンジンへのデータの最速のロード方法は、SAP HANA Cloud, data lake リレーショナルエンジンから、SAP HANA Cloud, HANA データベースの物理テーブルを指定するプロキシテーブルを作成するために「create existing local temporary table」を使用してHANA テーブルから SELECT で INSERT 文を実行する方法です。
これは、このブログで紹介しているコマンドを使用することで、とても容易に行うことができます。
あるいは、これらのコマンドを生成するプロシージャーを作成すると、さらに容易になります。(下の Daniel のブログを参照してください。)
Jason Hinsperger の「SAP HANA Cloud, data lakeへのデータロード」のブログでは、SAP HANA Cloud, data lake リレーショナルエンジンの vCPU 数やデータベースサイズを増やすとロードのパフォーマンスにどのような影響があるか説明しています。
https://blogs.sap.com/?p=1866471
Daniel Utvich の「SAP HANA Cloud, HANA データベースから SAP HANA Cloud, data lake へのデータの高速移動」のブログでは、システムテーブル情報をベースにした SQL コードを生成するプロシージャーの例を紹介しています。
https://blogs.sap.com/?p=1867099
オリジナルのブログはここまでです。
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
9 | |
9 | |
8 | |
8 | |
7 | |
7 | |
6 | |
5 | |
4 | |
4 |