プログラマ38の日記

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

TERADATA

TERADATA: TERADATAの後に、普通のDBに戻るのに時間がかかった思い出

しばらくTERADATAの開発を行った後に、通常のDB(業務用のSQL ServerやOracle)に戻った時がありました。 TERADATAでは、極力まとめて処理を行うのがポイントで、1000万件くらいであれば処理は数秒で終わります。 ※TERADATAにもキャパシティはあるので、その…

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

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

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を使ってまとめて登録した方が早いと…

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

TERADATAは、大量データを処理するようになっている TERADATAへのデータロードは、ファイルからであれば、FASTLOADやMULTILOADなどを使います。 ETLツールで他のデータベースからデータを取得して、TERADATAに入れる処理を作成することも多いと思います。 ET…

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

TERADTAのJDBCで複数ノードを指定する ODBC接続では、ODBCの設定で複数ノードを指定しますが、JDBC接続ではhostsファイルに指定します。 [hostsファイルへ追記] ノードのIPアドレス ホスト名 JDBCの接続名+cop+連番 10.50.50.101 tera1 teracop1 10.50.50.10…

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

たくさん書かないといけなくてよく忘れるのでメモ。 TERADATAの日付の変換 日付のフォーマット(dateをYYYY/MM/DD形式の文字列へ) select cast( cast( current_date as format 'YYYY/MM/DD') as CHAR(10) ) ; 日付のパース(YYYY/MM/DD形式の文字列からdate) s…

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

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

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

結合時に、結合先に合致するPartitionだけ検索する crmprogrammer38.hatenablog.com 上記で書いたようなパーティションを指定したテーブルと他のマスタテーブルを内部結合する 結合条件がパーティションを指定した項目である 結合するテーブルの関係は1:N…

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

Primary Partition Index(PPI)で検索をさらに早く TERADATAは、分散したデータに、さらにパーティション設定ができます。 パーティション設定した項目に検索条件を指定すると、フルスキャンではなく該当するパーティションのみスキャンすることができて、性…

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

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

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

文字列型に適切な文字コードを指定しよう TERADATAは、カラム単位に文字コードが指定できます。 CREATE SET TABLE SAMPLE ( LATINFIELD CHAR(2) CHARACTER SET LATIN CASESPECIFIC NOT NULL ,UNICODEFIELD VARCHAR(9) CHARACTER SET UNICODE CASESPECIFIC ) …