読者です 読者をやめる 読者になる 読者になる

【Excel】セルの値を数式で比較する時に、=(比較) と exact関数の違いではまったこと

私はプログラマーなので、プログラムの処理結果を期待値と比較する作業をかなりの頻度で行います。 そういう作業ではExcelのセルとセルの値を比較するのですが、 =( セル1 = セル2 ) での比較と、 = exact( セル1 , セル2 ) の比較で挙動が違いはまりました…

【Excel】VBAのround関数ではまったこと

まとまった計算をするのにVBAは便利なので、ちょっとした時に書きます。 ですが、がっつりVBAで開発すること自体は少ないので細かなところではまりました。 はまったのは round 関数 数式のround関数はround_half_upなのですが、 VBAのround関数はround_half…

【TERADATA】BIツールではViewで定義しよう

まずTERADATAでは、次のようにViewを定義します。 REPLACE VIEW SampleView ( field1 ,field2 ,field3) asLOCKING TABLE SampleTable FOR ACCESSselect field1 ,field2 ,field3from SampleTable; 上の赤の太字の記載は、テーブルがロックされててもデータを…

【DWH】データモデル(9.1から8にとらわれすぎない。)

DWH

この記事は、前回書いたデータモデリングの9つのことのラストです。 crmprogrammer38.hatenablog.com 思うことを書いてきましたが、データモデルのシンプルでわかりやすいガイドラインとしてスタースキーマモデルがあると思います。 1つ1つ場合分けをして…

【DWH】データモデル(8.ナチュラルキーを基本とし、サロゲートキーはピンポイントで使う。)

DWH

この記事は、前回書いたデータモデリングの9つのことの8つ目です。 crmprogrammer38.hatenablog.com DWHでは、サロゲートキーを使う場合があると思います。 個人的にサロゲートキーをポイントを絞ったほうがいいように感じています。 というのは以下のよう…

【DWH】データモデリング(7.先週との比較値、先月との比較値、前年との比較値などは、BIツールの機能を利用する。(機能がないならデータマートを作ろう))

DWH

この記事は、前回書いたデータモデリングの9つのことの7つ目です。 crmprogrammer38.hatenablog.com ハイエンドのBIツールは、複数のファクトの検索結果をBIツール側で結合する機能を持っています。 その機能を利用すると、データマートをたくさん用意する…

【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でさらに検索を早くする

TERADTAに、Join Indexという機能がある。 これはOracleのMaterialized Viewをクエリーリライトに特化したような機能で、あらかじめ結合や集計をした結果を保持する。 もちろん、元のテーブルが更新されれば即座にJoin Indexも更新される。(V4ぐらいでは、…

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

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

【TERADATA】 大きいテーブル同士を結合する時に結合条件のカラムがそれぞれPrimary Indexだと結合処理が早い

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

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

TERADATA拡張のQUALIFY句がある。 QUALIFY句を使って、分析関数の値でさらに条件をかけることができる。 select productcode , ammount, rank() over(order by ammount desc)from samplequalify rank() over(order by ammount desc) <= 100; こんな感じで使…

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

select 'AAA' || '0A'XC || 'BBB' --改行コード select 'AAA' || '09'XC || 'BBB' --Tab ぱっと見で、わかりやすくなるかも。

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

以前、TERADATAではカラム単位に文字コードが指定できるということを書きました。 crmprogrammer38.hatenablog.com カラムをLATINで定義できれば、UNICODEの半分のサイズとなるので、 ・データのサイズも小さくできる ・そのカラムで結合する際に、結合のス…

【TERADATA】 JDBCのFASTLOADモードを使おう

TERADATA12頃から、JDBCでFASTLOADモードが追加されています。 crmprogrammer38.hatenablog.com 前回TERADATAにJDBCを使ってデータをいれるときは、addBatchを使ってまとめて登録した方が早いということを書きましたが、FASTLOADモードは同じような書き方で…

【TERADATA】 1件ずつinsertは性能が著しく落ちるよ

TERADATAへのデータロードは、ファイルからであれば、FASTLOAD、MULTILOADなどを使うと思います。 TERADATAとの連携用にETLツールなどを購入して他のデータベースから直接取得したデータをTERADATAに入れたいなんてのもあって ・ODBC接続 ・JDBC接続 が用意…

【TERADATA】 WindowsOSで、JDBC接続では、hostsファイルに複数Nodeを定義する

ODBC接続では、ODBCの設定で複数ノードが指定できるけど、JDBC接続ではhostsファイルをいじることになる。 [hostsファイルへ追記] ノードのIPアドレス ホスト名 JDBCの接続名+cop+連番 10.50.50.101 tera1 teracop1 10.50.50.102 tera2 teracop2 10.50.50.10…

【TERADATA】 日付の変換や文字のトリムメモ

結構たくさん書かないといけなくてよく忘れます。 日付のフォーマット(dateをYYYY/MM/DD形式の文字列へ) select cast( cast( current_date as format 'YYYY/MM/DD') as CHAR(10) ) ; 日付のパース(YYYY/MM/DD形式の文字列からdate) select cast( '2010/11/21…

【TERADATA】 定義情報(テーブル一覧、カラム一覧、インデックス一覧など)の取得

自分がよく使う定義の参照などコマンド テーブル一覧の表示 help user [ユーザ名]; カラム一覧の表示 help table [テーブル名]; テーブルのインデックス一覧の表示 help index [テーブル名]; テーブルの統計情報一覧の表示 help stat [テーブル名]; テーブル…

【TERADATA】Primary Partition Index と Dynamic Partition Elimination実行プラン

crmprogrammer38.hatenablog.com ・上の記事で書いたようなパーティションを指定したテーブルと他のマスタテーブルを内部結合する ・結合条件がパーティションを指定した項目である ・結合するテーブルの関係は1:Nの関係が物理的に保証されている ・マスタ…

【TERADATA】 Primary Partition Indexでパーティション設定

TERADATAは、分散したデータをさらにパーティション設定ができる。 パーティション設定した項目に検索条件を指定するとフルスキャンではなく該当するパーティションのみスキャンされるため性能があがる。 例えば次のテーブルでは、Datestring項目には、YYYYM…

【TERADATA】 PRIMARY INDEXは、データの分散のキー

TERADATAは、データを分散して管理していて、その分散用のキーとしてPRIMARY INDEXを指定する。 CREATE SET TABLE SAMPLE ( ,LATINFIELD CHAR(2) CHARACTER SET LATIN CASESPECIFIC NOT NULL ,UNICODEFIELD VARCHAR(9) CHARACTER SET UNICODE CASESPECIFIC )…

【TERADATA】 カラム単位の文字コード指定

TERADATAは、カラム単位に文字コードが指定できる。 CREATE SET TABLE SAMPLE ( ,LATINFIELD CHAR(2) CHARACTER SET LATIN CASESPECIFIC NOT NULL ,UNICODEFIELD VARCHAR(9) CHARACTER SET UNICODE CASESPECIFIC ) UNIQUE PRIMARY INDEX ( LATINFIELD ) ; 文…

はじめました。

主にメモです。