【SQL】SAP HANAでDB処理が速くなるクエリ

568 語
3 分
【SQL】SAP HANAでDB処理が速くなるクエリ

はじまり#

135ml avatar
135ml
今回は、SAP HANAでテーブルのレコードをEXPORTするために使用したSQLを紹介します。2012年リリースのHANA DBより以前のバージョンだと、1つのテーブルに2000万件以上レコードが存在する場合、ちゃんとEXPORT出来ないというバグが存在します。そのため、一時的にテーブルを分割したテーブルを用意する必要があり、その時のEXPORTの作業までに時短ができたクエリになります。
リサちゃん avatar
リサちゃん
仏説摩訶般若波羅蜜多心経 観自在菩薩 行深般若波羅蜜多時 照見五蘊皆空 度一切苦厄 舎利子 色不異空 空不異色 色即是空 空即是色 受想行識亦復如是 舎利子 是諸法空相 不生不滅 不垢不浄 不増不減 是故空中・・・・・・
135ml avatar
135ml
冒頭の文がいきなり長いからってどさくさに紛れて般若心経を唱えるんじゃあない。 はい、般若心経じゃなくて、HANA SQLどうぞ~!

速くなるSQL文#

以下、クエリの紹介になります。

CREATE文#

速くする前ではただ単に分割一時テーブルを作成するだけですが、速くした後ではテーブルをパーティション化させて作成します。

このALTER TABLE文の一工夫を加えることで、INSERT文でレコードを追加する処理が、およそ半分くらいの時間で済み、CPU使用率も平均して半分くらいになります。

ALTER TABLE文のPARTITIONS句の数値は、増やしていくと段々効果が無くなってくるので、そこの検証および調整が必要です。

速くする前:

CREATE COLUMN TABLE "WARDROBE_AP"."WARDROBE_INFO_TMP1" ("INFO_NUMBER" NVARCHAR(14) NOT NULL ,
"WARDROBE_CD" NVARCHAR(5),
"YEAR" INTEGER CS_INT,
"CC_Q_INFO_STATUS_CD" VARCHAR(3),
"TROUBLE_INFODB_LINK_DATE_TIME" LONGDATE CS_LONGDATE,
"TEMP_REG_READ_START_DAY" DAYDATE CS_DAYDATE,
"DEL_FLG" ALPHANUM() CS_ALPHANUM,
PRIMARY KEY ("INFO_NUMBER")) UNLOAD PRIORITY 5 AUTO MERGE
;

速くした後:

CREATE COLUMN TABLE "WARDROBE_AP"."WARDROBE_INFO_TMP1" ("INFO_NUMBER" NVARCHAR(14) NOT NULL ,
"WARDROBE_CD" NVARCHAR(5),
"YEAR" INTEGER CS_INT,
"CC_Q_INFO_STATUS_CD" VARCHAR(3),
"TROUBLE_INFODB_LINK_DATE_TIME" LONGDATE CS_LONGDATE,
"TEMP_REG_READ_START_DAY" DAYDATE CS_DAYDATE,
"DEL_FLG" ALPHANUM() CS_ALPHANUM,
PRIMARY KEY ("INFO_NUMBER")) UNLOAD PRIORITY 5 AUTO MERGE
;
ALTER TABLE "WARDROBE_AP"."WARDROBE_INFO_TMP1" DROP PRIMARY KEY;
ALTER TABLE "WARDROBE_AP"."WARDROBE_INFO_TMP1" PARTITION BY ROUNDROBIN PARTITIONS 8;

EXPORT文#

こちらは速くした後では、分割一時テーブルからのEXPORTを並列実行してくれるようになります。カラム数が多い場合は、THREAD句の数字を減らして検証および調整が必要となります。

こちらも処理時間とCPU使用率が半分くらいになります。

速くする前:

EXPORT "WARDROBE_AP"."WARDROBE_INFO_TMP1" AS CSV INTO '/work/20211126_export' WITH REPLACE;
EXPORT "WARDROBE_AP"."WARDROBE_INFO_TMP2" AS CSV INTO '/work/20201126_export' WITH REPLACE;
EXPORT "WARDROBE_AP"."WEATHER_INFO_TMP1" AS CSV INTO '/work/20201126_export' WITH REPLACE;
EXPORT "WARDROBE_AP"."WEATHER_INFO_TMP2" AS CSV INTO '/work/20201126_export' WITH REPLACE;
EXPORT "WARDROBE_AP"."WEATHER_INFO_TMP3" AS CSV INTO '/work/20211126_export' WITH REPLACE;
EXPORT "WARDROBE_AP"."USER_INFO_TMP1" AS CSV INTO '/work/20211126_export' WITH REPLACE;
EXPORT "WARDROBE_AP"."USER_INFO_TMP2" AS CSV INTO '/work/20211126_export' WITH REPLACE;

速くした後:

EXPORT "WARDROBE_AP"."WARDROBE_INFO_TMP1", "WARDROBE_AP"."WARDROBE_INFO_TMP2", "WARDROBE_AP"."WEATHER_INFO_TMP1", "WARDROBE_AP"."WEATHER_INFO_TMP2", "WARDROBE_AP"."WEATHER_INFO_TMP3", "WARDROBE_AP"."USER_INFO_TMP1", "WARDROBE_AP"."USER_INFO_TMP2", "WARDROBE_AP"."CONSULT_PARTY_INFO", "WARDROBE_AP"."CC_Q_INFO", "WARDROBE_AP"."CC_A_INFO" AS CSV INTO '/work/20211126_export' WITH REPLACE THREAD 7;

wc⇒awk(SQLじゃなくてBashです。)#

こちらはCSVをEXPORTした後に、CSVの行数がレコード数と同じかどうかを確認するために使用したBashになるのですが、時短になったのでついでに記載しておきます。

大体、処理時間が2/3くらいに削減できます。

速くする前:

Terminal window
wc -l /work/20211126_export/taihi/index/WARDROBE_AP/WA/WARDROBE_INFO/data.csv>linesResult.txt 2>&1

速くした後:

Terminal window
awk 'END {print NR}' /work/20211126_export/taihi/index/WARDROBE_AP/WA/WARDROBE_INFO/data.csv>linesResult.txt 2>&1

おしまい#

135ml avatar
135ml
今回は時短できるSQLを紹介しました! どうでした?
リサちゃん avatar
リサちゃん
得阿耨多羅三藐三菩提 故知般若波羅蜜多 是大神呪 是大明呪 是無上呪 是無等等呪 能除一切苦 真実不虚 故説般若波羅蜜多呪 即説呪日 羯諦 羯諦 波羅羯諦 波羅僧羯諦・・・・・・
135ml avatar
135ml
ダメだ、内なる自分と戦ってるわ・・・ 今回はこのへんで!

以上になります!

記事を共有

この記事が役に立ったなら、ぜひ他の人と共有してください!

【SQL】SAP HANAでDB処理が速くなるクエリ
https://endorphinbath.com/posts/saphana-faster-query/
著者
kinkinbeer135ml
公開日
2021-12-20
ライセンス
CC BY-NC-SA 4.0
関連記事 スマート
1
【Python、Golang】NotionのページのプロパティをCloud SQLのPostgreSQLに記録する(第1回)
Code NotionのページのプロパティをPythonで取得して、Cloud SQL上に作成されたPostgreSQLのDBに記録する手順を紹介します。Cloud FunctionsではCloud SQLを使えない。
2
今年食ったサバ缶のまとめ(2025年版:後編)
Mackerel 2025年に筆者が食べたサバ缶、イワシ缶、サンマ缶などを紹介します。個人的な美味しさ、DHAおよびEPAの含有量の目安なども掲載しています。
3
今年食ったサバ缶のまとめ(2025年版:前編)
Mackerel 2025年に筆者が食べたサバ缶、イワシ缶、サンマ缶などを紹介します。個人的な美味しさ、DHAおよびEPAの含有量の目安なども掲載しています。
4
【ffmpeg、PowerShell】MEGAでWebm動画を再生出来るようにする
Software クラウドストレージサービスであるMEGAでWebm拡張子の動画を再生する時に音声コーデックによっては再生できない場合があります。有効な音声コーデックとPowerShellで行うその変換方法を紹介します。
5
最近WSLでVSCodeを触ってイラッとしたこと
Software WSLでVisual Studio Codeを設定する時とその後に触っている時にイラッとしたことをまとめました。ちょっとしたトラブルシューティングとして使える記事かもしれません。
ランダム記事 ランダム
Profile Image of the Author
kinkinbeer135ml
SIerをやめて、プログラミングを勉強しています。※Amazonアソシエイトに参加しています。
お知らせ
私のブログへようこそ!これはサンプルのお知らせです。
音楽
カバー

音楽

再生中なし

0:00 0:00
歌詞なし
カテゴリ
タグ
サイト統計
記事
287
カテゴリー
8
タグ
93
総文字数
486,174
運用日数
0
最終活動
0 日前

目次