LoginSignup
1
2

More than 5 years have passed since last update.

ASTERIA ビッグデータを扱うには

Last updated at Posted at 2017-10-04

ASTERIAはJOINが苦手

DBから抽出するRDBGetでは, 20万レコードを取り出したとき, 動かなくなくりました.
また, 5万レコードと1万レコードをJOINしたとき,
JOINは出来たのですが, 処理時間が遅すぎて使い物になりませんでした.

結論, ASTERIAはビッグデータの操作が苦手.

対処方法 DBサーバに処理をさせ,ASTERIA側はプロシージャの結果を受け取る

MySQLでは,
viewではユーザ変数が使えないので,
行番号はtemporary tableで作成する.

temporary tableは自己結合が出来ないので,
サブクエリに関してもtemporary tableを作成する.

それをストアプロシージャで一つの処理とする.

実際に作ってみた.

getLastRow()
delimiter //  
create procedure getLastRows() 
BEGIN
-- メイン句
SET @i=0;
drop table if exists addRowNo;
create temporary table addRowNo 
 -- インデックスを貼ると高速化
(
  `行番号` int(11),
  primary key(`行番号`)
) 
AS
SELECT
  cast(@i:=@i+1 as SIGNED) AS '行番号',
  稟議番号,
  稟議ステータス,   
  稟議承認者名
FROM
  DUMMY_TABLE

-- SubQuery(Temporary は自己結合できないので)
 SET @j=0;  -- 変数名を変える
 drop table if exists getKeys;
 create temporary table getKeys
 (
  `行番号` int(11),
  primary key(`行番号`)
) 
AS
SELECT
  max(cast(@j:=@j+1 as SIGNED)) AS '行番号',
  稟議番号
FROM
  DUMMY_TABLE
GROUP BY 稟議番号;

-- 最終行を取得するクエリ
SELECT MAIN.* 
FROM addRowNo MAIN
LEFT getKeys SUB
on  MAIN.行番号 = SUB.行番号
WHERE SUB.行番号 is not null;

END //
delimiter ;

これを

SQLCall1
call getLastRows() 

で呼び出すことが出来る

参照(以前の記事をもとにしています])
ASTERIA WARPでキーごとの最終行(=履歴の最新行)を取得するには

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2