プログラマ38の日記

主にプログラムメモです。

2017-02-01から1ヶ月間の記事一覧

【DWH】データモデリング (6.ファクトは極限まで小さくする。)

DWH

この記事は、前回書いたデータモデリングの9つのことの6つ目です。 crmprogrammer38.hatenablog.com ファクトテーブルは、DWHでは一番件数が多くなるテーブルなので、1レコードで数バイトの違いが、最終的に数ギガバイトの違いになって現れてきます。 なの…

DWH: データモデリング (5.ディメンションを大きくし過ぎない。)

DWH

この記事は、前回書いたデータモデリングの9つのことの5つ目です。 crmprogrammer38.hatenablog.com この辺りからは、ゆるくモデリングしようよという内容になっています。 ディメンションと結合するのはファクトだけで、ディメンションからさらにディメン…

【DWH】データモデリング (4.結合するキーは極力サイズを小さくする。)

DWH

この記事は、前回書いたデータモデリングの9つのことの4つ目です。 crmprogrammer38.hatenablog.com 件数が多ければ多いほど結合の処理時間がかかってきます。 なので、物理的に問題がないなら結合するキー項目のサイズを極力小さくします。 具体的には、 …

DWH: データモデリング (3.ヘッダと明細の構成のファクトは1つのファクトに結合する。)

DWH

この記事は、前回書いたデータモデリングの9つのことの3つ目です。 crmprogrammer38.hatenablog.com ヘッダテーブルと明細テーブルの構成でトランザクションを構成する場合は多いと思います。 そういう時は、ヘッダテーブルと明細テーブルを結合して1つの…

DWH: データモデリング (2.ディメンションとファクトは、内部結合にする。)

DWH

この記事は、前回書いたデータモデリングの9つのことの2つ目です。 crmprogrammer38.hatenablog.com 安定した性能にするなら内部結合です! DWHだと、ファクトの件数が多くて、ディメンションの項目に指定された検索条件を元に、一番最適なファクトの絞…

DWH: データモデリング (1.ディメンションとファクトは、物理的に1:Nで結合する。)

DWH

この記事は、前回書いたデータモデリングの9つのことの1つ目です。 crmprogrammer38.hatenablog.com まず、物理的に1:Nで結合するという点について以下を示しています。 ・ディメンションとファクトで結合する際に、ディメンション側の結合キーはユニー…

DWH: スタースキーマをベースにあらためて考えてみたデータモデリングの9つのこと

DWH

DWHのデータモデルでとても有名な"スタースキーマ"。 でも、アプライアンスDBを導入したんだからきちんと正規化した方が後々使いやすいといった意見もあったりします。 私は、スタースキーマはとてもシンプルでわかりやすく、そして結合が少なくて使いやすい…

DWH: BI/DWHのプロジェクトの作業で思うこと

DWH

私の経験として、BI/DWHのプロジェクトは他の業務パッケージのプロジェクトに比べて難しくて失敗しやすいなーと考えています。 明確に、なぜ失敗しやすいのかといった分析結果があるのかもしれませんが、個人的に思うことをつらつらと書いていこうと思います…

雑記: DWHのアプライアンスDBについて思うこと

TERADATAについての記事を書いてきましたが、他のDWHのアプライアンスDBはどうなんだろうなと思いました。 ただ、調べると、Oracle exadataとTERADATA以外は情報が少ないので、この2つの争いになってるように思います。 TERADATAからOracle exadataに移行し…

TERADATA: TERADATAにデータを入れるツールを作りました(ACCESSのデータをTERADATAにロードできます)

開発中に手持ちのExcelデータをTERADATAに入れたいことは多々あります。 ちょっとした件数(10万件程度)を入れるのに便利なツールの紹介です。 通常TERADATAに入れるやり方は、 1.CSVファイルにして、FASTLOADや、MULTILOADのスクリプトを書いてデータを…

TERADATA: Aggregate Join Indexでさらに検索を早くする

Join Indexはクエリーリライト用にあらかじめ結合、集計しておく仕組み TERADTAに、Join Indexという機能があります。 これはOracleのMaterialized Viewをクエリーリライトに特化したような機能で、あらかじめ結合や集計をした結果を保持しておく仕組みです…

TERADATA: 他のテーブルの値で更新するUPDATE文

UPDATEの文法って、DB毎に癖があって覚えられないのでメモ。 UPDATE [更新するテーブル] FROM [更新元テーブル] SET [更新するカラム] = [更新元テーブル].[更新元カラム] WHERE [更新するテーブル].[結合カラム] = [更新元テーブル].[結合カラム]; TERADATA…

TERADATA: 大きいテーブル同士を結合する時に結合条件のカラムがそれぞれPrimary Indexだと結合が最速になります

TERADATAは、データを分散している TERADATAは、データを分散させて管理していて、Primary Indexに指定したカラムを元に分散させている。分散された1つはAMPと呼ばれ、1つのDBに複数AMPがある状態となります。(詳細は企業のサイトにあると思います) デー…

TERADATA: TERADATAの拡張SQL構文のQUALIFY句は、他のDBでも使えるといいなと思う

TERADATAは分析関数の値でさらにフィルタできる TERADATAのSQLには、独自拡張されたQUALIFY句があります。 QUALIFY句を使うと、分析関数の値でさらにフィルタをかけることができます。 例えば、金額を大きい順に並べて100番までの商品を取得したい場合は次の…

TERADATA: SQLで改行やタブをコードで指定する

文字コードで改行やタブを指定したい Oracleのchr関数のようなものを探していましたが、関数はなく次のように書けることがわかりました。 --改行コード select 'AAA' || '0A'XC || 'BBB' --Tab select 'AAA' || '09'XC || 'BBB' 独特だなーと思いました。

TERADATA: テーブルの結合や、文字の連結処理では文字コードが揃ってないと遅くなる

文字同士で処理する際に、文字コードが揃っていることを確認しよう 以前、TERADATAではカラム単位に文字コードが指定できるということを書きました。 crmprogrammer38.hatenablog.com カラムをLATINで定義できれば、UNICODEの半分のサイズとなるので、 ・デ…

TERADATA: JDBCのFASTLOADモードを使おう

TERADATAのJDBCドライバにはFASTLOADモードが用意されています。 TERADATA12頃から、JDBCでFASTLOADモードが追加されました。 crmprogrammer38.hatenablog.com 前回TERADATAにJDBCを使ってデータをいれるときは、addBatchを使ってまとめて登録した方が早いと…