© 2019 QlikTech International AB. All rights reserved.
Expression Builder
(式ビルダ)の詳細
クリックテック・ジャパン株式会社
© 2019 QlikTech International AB. All rights reserved.
2
• Expression Builderの利用方法
• Element Paneで利用可能な要素
アジェンダ
© 2019 QlikTech International AB. All rights reserved.
3
Expression Builder
の利用方法
4
Expression Builderの概要
Expression Builderの4つの主要部分を示す例を示します。フィルタ、変換、またはグローバル変換のどちらの式を作成するかによって利用できるオプションが異なる場合があります。
• Elements Pane(左側): このペインには、式に追加できる要素が含まれています。
 Metadata: グローバル変換を使用する場合にのみ使用可能
 Input: 変換またはフィルターを使用する場合にのみ使用可能
 Header: グローバル変換の場合、このタブは[Add Column]を選択した
場合にのみ使用できます。
 Variables: 変数
 Operators: 演算子
 Functions: 関数
• Build Expressionパネル:
 作成する式を入力します。列や演算子などの要素をボックスに移動します。この
ボックスには、式の全部または一部を入力することもできます。
• Parse Expressionパネル:
 式を作成した後、[Parse Expression] をクリックして式のパラメーターを一
覧表示します。その後、各パラメータに値または引数を入力できます。
 パネルの上部にはOperatorツールバーがあります。このツールバーには、最も一
般的な演算子が含まれています。
• Test Expressionパネル:
 このパネルには、式の各パラメーターに値を指定した後に実行できるテストの結
果が表示されます。
5
式の作成
Element Paneパネルから、列や演
算子をダブルクリックで選択
上部のOperatorツールバーから、
基本的な演算子を選択可能
Build Expressionパネル上で式を
作成・確認
6
式の作成 – Operatorツールバー
Operatorツールバー
• [Operator] ツールバーは、[Build Expression] ボックスの上にあります。この関数には最も一般的な演算子が含まれているため、式に簡単に追加できます。
• 加算、減算、乗算、除算、割合、等しくない、等しい、連結、AND、OR の演算子を使用できます。
[オペレータ]ツールバーを使用するには:
1. [Build Expression] ボックスで、演算子を追加する場所をクリックします。
2. 追加する演算子をクリックします。式に追加されます。
7
式の解析
式を解析して、そのパラメーターを決定し、式が有効かどうかを判断できます。
式を解析するには
1. [Parse Expression]をクリックします。
 式が有効でない場合は、[Expression Builder] ウィンドウの下部に
赤でエラー メッセージが書き込まれます。
 式が有効な場合は、パラメーターが[Parse Expression] セクション
に表示されます。
8
式のテスト
テストプロシージャを使用して、テスト式の結果を表示できます。次の図は、評価され、テスト結果を含む、ビルドされた式の例です。
式をテストするには:
• 式をテストする各パラメータに有効な値入力します。
たとえば、LastName = 山田、FirstName = 太郎を入力します。
※ source_lookupおよびtarget_lookup関数の呼び出しのテストはサポートされ
ていません。
9
Element Paneで
利用可能な要素
10
Expression Builder
変換、フィルター、およびグローバル変換の式を構築するには、次の型の要素を使用できます。
タブを選択して、要素を選択します。
• Columns/列 (変換とフィルターのみ)
• Data/データ (グローバル変換のみ)
• Metadata/メタデータ (グローバル変換のみ)
• Variables/変数
• Operators/演算子
• Functions/関数
• Headers/ヘッダー
• User-defined transformations/ユーザー定義変換
11
Data (Global Transformationsのみ)
• このタブでは、変更された列データ、元のソース列データを利用する式を作成できます。次のオプションを使用できます。
 $AR_M_MODIFIED_COLUMN_DATA - グローバル変換を使用して置換または変更されたデータ(Replace column valueなど)を指定
 $AR_M_SOURCE_COLUMN_DATA- ソースの元のデータを指定
• 例:“Age” という名前のソース列を対象とする場合で、50 歳から 80 歳までの市民のすべてのレコードを除外する式を次のように定義できます。
$AR_M_SOURCE_COLUMN_DATA > '50' AND $AR_M_SOURCE_COLUMN_DATA < '80'
12
Columns /列 (TransformationとFilterのみ)
このタブには、作業しているテーブルの列が一覧表示されます。
※ NUMBER の条件が 19 桁を超える条件を含む式は無効です。たとえば、次の式は無効です。
case when $ID==12345678910111213149 then '1' else '0' end
13
Metadata (Global Transformationsのみ)
[Metadata] タブには、式で使用できる変数が含まれています。
 名前にMODIFIEDを持つ変数は、グローバル変換を使用して置換または変更されたメタデータを指定するために使用
 MODIFIEDを使用しない変数名は、ソース データベースで定義されている元のメタデータを指定するために使用
• AR_M_MODIFIED_SCHEMA - 変更されたソース スキーマ名。
• AR_M_MODIFIED_TABLE_NAME - 変更されたソース テーブル名。
• AR_M_MODIFIED_COLUMN_NAME - ソース テーブル内の変更された列名。
• AR_M_MODIFIED_DATATYPE_NAME - ソース テーブル内の列の変更されたデータ型。
• AR_M_MODIFIED_DATATYPE_LENGTH - ソース テーブル内の列の変更されたデータ型の長さ。
• AR_M_MODIFIED_DATATYPE_PRECISION - ソース テーブル内の列の変更されたデータ型の精度。
• AR_M_MODIFIED_DATATYPE_SCALE - ソース テーブル内の列の変更されたデータ型のスケール。
• AR_M_SOURCE_SCHEMA - ソース スキーマの名前。
• AR_M_SOURCE_TABLE_NAME - ソース テーブルの名前。
• AR_M_SOURCE_COLUMN_NAME - ソース テーブルの列の名前。
• AR_M_SOURCE_DATATYPE_NAME - ソース テーブル内の列のデータ型。
• AR_M_SOURCE_DATATYPE_LENGTH - ソース テーブル内の列のデータ型の長さ。
• AR_M_SOURCE_DATATYPE_PRECISION - ソース テーブル内の列のデータ型の精度。
• AR_M_SOURCE_DATATYPE_SCALE - ソース テーブル内の列のデータ型のスケール。
14
Header
• 変換を定義するときに、ヘッダーを含む式を作成することで、どのヘッダーをレプリケートするかを決定できます。(デフォルトでは、ソーステーブルのヘッダーは
ターゲットにレプリケートされません。)
• ヘッダー値を使用してフィルターを作成できます。ヘッダー フィルターは、変更処理中に適用されます。
※ Headerタブは、フィルターと変換に使用できます。グローバル変換で使用できるのは、[Add Column] を選択した場合だけです。
※ ヘッダー列は、明示的に指定されていない限り、すべてのエンドポイントでサポートされます。
15
Header / ヘッダー
ヘッダー名 変更プロセスの値 Full Loadの値 データ型
AR_H_CHANGE_SEQ
タスクのすべての Change テーブルに共通する、単調に増加する変更シーケンサー。変更シーケンス
の形式は次のとおりです (レプリケートサーバーの UTC 時刻は時間です)。
YYYYMMDhDHHmSShhxxxxxxxxxxxxxxxxxxxxxxxxx
 YYYY は 4 桁の年です (2012 など)
 MM は 2 桁の月です (範囲は 01 から 12 まで)
 HH は、その日の時間です (範囲は 00 から 23 まで)
 mmは時間の分です(範囲は00から59まで)
 SS は分単位の秒です (範囲は 00 から 59 まで)
 hh は 2 番目の 100 分の 1 です (範囲は 00 から 99 まで)
 xxxxxxxxxxxxxxxxxxxxxx は、19 桁の 0 個のプレフィックス付き変更番号 (タスクごと
にグローバル) です。
通常、時間部分は、変更レコードを含むトランザクションのコミット時間を指します。Qlik Replicateに
はシーケンス番号の単調性を維持するロジックが含まれているため、エンドポイント時間を変更または調
整すると、同じタイムスタンプ内にあるように見えても変更数が増えているように見える複数の変更が発
生する可能性があります。
xxx…xxx は、通常、BEFORE-IMAGE レコードの場合は、一致する UPDATE レコードの変更番
号と同じである (たとえば、BEFORE-IMAGE の変更番号が 1000 で、UPDATE の変更番号が
1001 の場合は、両方とも 1001) という点を除いて、データレコードからの内部変更番号です。これ
により、テーブルとそれ自体の間で単純な左外部結合が可能になり、左側では特定の時点までスキャ
ンしますが、operation=before-imageをフィルタリングし、右側はchange_operが「B」である同じ
change_seqに結合します。
空 VARCHAR(35)
AR_H_STREAM_POSITION
ソースのストリーム位置値 (通常は SCN または LSN) 。これによりReplicateタスクを最後に処理さ
れたイベントから再開できます。
空の文字列 STRING
AR_H_TIMESTAMP
Replicateサーバーのローカル時刻として表される変更操作のタイムスタンプ。データベースとレプリケー
トサーバーが同じタイム ゾーンにある場合、タイムスタンプは実際の変更操作をほぼ表します。
現在のタイムスタンプ DATETIME
16
Header / ヘッダー
ヘッダー名 変更プロセスの値 Full Loadの値 データ型
AR_H_TRANSACTION_ID
変更レコードが属するトランザクションの ID。実際の値は 128 ビット のトランザクション ID
の 16 進数文字列です。
※ トランザクション ID は一意であるとは保証されないため、レポートまたはその一意性に依
存する他の操作の作成には使用しないでください。
空 VARCHAR (32)
AR_H_COMMIT_TIMESTAMP
Replicateサーバーの時刻に従って、ソース データベースのコミット タイムスタンプ。ソース
データベースとReplicateサーバーが同じタイム ゾーンにある場合、タイムスタンプはソース
データベースの実際のコミットのおおよその時間になります。
現在のタイムスタンプ DATETIME
AR_H_DB_COMMIT_TIMESTAMP データベース サーバの時刻に基づいて、ソース データベースのコミット タイムスタンプ。
※ 次のソース エンドポイントにのみ: Oracle, Microsoft SQL Server, IBM DB2 for
z/OS, Microsoft Azure SQL Managed Instance, and Amazon RDS for
SQL Server
NULL DATETIME
AR_H_OPERATION INSERT, UPDATE, DELETEのいずれか。 INSERT STRING
AR_H_USER
ソース データベースに変更を加えたユーザー。
※ 次のソース エンドポイントにのみ:Microsoft SQL Server、Microsoft Azure SQL
Managed Instance、Amazon RDS for SQL Server、IBM Informix、IBM
DB2 for z/OS、IBM DB2 for LUW、Oracle、File、AIS-based sources、
SAP Sybase ASE
空 STRING
AR_H_JOB_NAME ソース・データベースに変更を加えた iSeries ジョブ。
※ IBM DB2 for iSeries ソース・エンドポイントにのみ関連します。
空 STRING
AR_H_PROGRAM_NAME ソース・データベースに変更を加えた iSeries プログラム。
※ このヘッダーは、レプリケート2021 年 5 月 SR3 からのみ使用できます。
※ IBM DB2 for iSeries ソース・エンドポイントにのみ。
空 STRING
17
Variables / 変数
式には、次の表に示す変数 (実行時に置き換えられる変数) を含めることができます。
変数名 説明 データ型
AR_V_HOST_NAME Qlik Replicateサーバーがインストールされているマシンのホスト名。 STRING (50)
AR_V_SOURCE_NAME エンドポイント設定で定義されたソース エンドポイントの論理名。
STRING (50)
AR_V_TARGET_NAME エンドポイント設定で定義されたターゲット エンドポイントの論理名。
STRING (50)
AR_V_TASK_NAME タスク名。 STRING (50)
AR_V_TASK_UUID タスクを識別する一意の文字列 (ユニバーサル一意識別子)。
STRING (50)
AR_V_RELOAD_TIME ソース テーブルが再読み込みされた時刻。 DATETIME (6)
AR_V_START_TIME タスクが開始された時刻。 DATETIME (6)
18
Operators / 演算子
式を作成するために使用できる SQLite 演算子について説明します。演算子は次のカテゴリに分けられます。
文字列演算子 論理演算子 数学演算子
19
Operators / 演算子
文字列演算子
演算子 説明
||
文字列を連結します。
 $FIRST_NAME || $LAST_NAME
20
Operators / 演算子
論理演算子
演算子 説明
!= or <>
• 等しくない
 $SALARY!=100000
IS
• 同じ
 $HIRE_DATE IS 2014-09-29
• 一方または両方のオペランドが NULL でない限り、IS は = と同じ関数を実行します。この場合、
両方のオペランドが NULL の場合、IS 演算子は 1 (true) と評価されます。一方のオペランドが
NULL で、もう一方のオペランドが NULL でない場合、IS 演算子は 0 (false) と評価されます。
IS NOT
• 同じではない
 $HIRE_DATE IS NOT 2014-09-29
• 一方または両方のオペランドが NULL でない限り、IS は!=と同じように機能しません。この場合、
両方のオペランドが NULL の場合、IS NOT 演算子は 0 (false) と評価されます。一方のオペ
ランドが NULL で、もう一方のオペランドが NULL でない場合、IS NOT 演算子は 1 (true) と
評価されます。
IN
• IN 演算子は、左に 1 つのスカラー オペランドを取り、右側のベクトル オペランドを 0 個以上のス
カラーの明示的なリストまたは単一のサブクエリによって形成します。IN 演算子の右オペランドがサ
ブクエリの場合、サブクエリは単一の結果列を持つ必要があります。右オペランドが空のセットの場
合、IN の結果は、左オペランドに関係なく、左オペランドが NULL であっても false になります。
• SQLite では、IN 演算子の右側にあるスカラー値の括弧付きリストを空のリストにできますが、他
のほとんどの SQL エンドポイント エンジンと SQL92 標準では、リストに少なくとも 1 つの要素を
含める必要があります。
LIKE
• LIKE 演算子は、パターン・マッチングの比較を行います。LIKE 演算子の右側のオペランドにはパ
ターンが含まれ、左オペランドにはパターンと一致する文字列が含まれます。LIKE パターンのパー
セント記号 ("%") は、文字列内の 0 個以上の文字の任意のシーケンスと一致します。LIKE
パターンのアンダースコア ("_") は、文字列内の任意の 1 文字と一致します。その他の文字は、
それ自体または小文字/大文字に対応します。(デフォルトでは、SQLite は ASCII 文字の大文
字/小文字のみを認識します。LIKE 演算子は、ASCII の範囲を超える Unicode 文字の場合、
デフォルトで大文字と小文字が区別されます。
• たとえば、'a' LIKE 'A' という式は TRUE ですが、'æ' LIKE 'Æ' は FALSE です)。
• LIKE の前に NOT キーワードを付けることができます。
CASE
• 条件のリストを評価し、複数の可能な結果式の 1 つを返します。
 例 1:WHEN $NEWEST = 'Y' THEN '1' ELSE '0' END
 例 2:
case length($month)
when 2 then $year||$month
when 1 then $year||0||$month end
演算子 説明
GLOB
• GLOB 演算子は LIKE 演算子と同じように動作しますが、ワイルドカードには UNIX ファイル の
GLOB構文を使用します。GLOB は大文字と小文字を区別します。
• GLOB は、テストの感覚を反転させるために NOT キーワードを前に付けることができます。イン
フィックス GLOB 演算子は、関数 glob(Y,X) を呼び出すことによって実装され、その関数をオー
バーライドすることによって変更できます。
MATCH
• MATCH 演算子は、match() アプリケーション定義関数の特殊な構文です。デフォルトの
match() 関数の実装は例外を発生させるので、実際には何の役にも立ちません。しかし、拡張
機能は、より役に立つロジックで match() 関数をオーバーライドできます。
REGEXP
• REGEXP 演算子は、regexp() ユーザー関数の特殊な構文です。regexp() ユーザー関数は
デフォルトで定義されていないので、REGEXP 演算子を使用すると、通常はエラー・メッセージが
表示されます。
AND
• 両方のオペランドが真です。
 $MANAGER_ID AND EMPLOYEE ID >100
OR
• いずれかのオペランドが true です。
 $MANAGER_ID OR EMPLOYEE ID >100
<<
• ビット単位シフト左。
 x << n
 x の左に n ビットずつシフトする。
>>
• ビット単位のシフト右。
 x >> n
 x の右に n ビットずつシフトする。
& • 単項and
| • 単項or
<
• より小さい
 $SALARY<100000
<=
• 以下の値
 $SALARY<=100000
>
• より大きい
 $SALARY>100000
>=
• 次の値以上の値です
 $SALARY>=100000
= or ==
• 次の値に等しい
 $SALARY=100000
21
Operators / 演算子
数学演算子
演算子 説明
+ 2 つの値を加算します。
DEPARTMENT_ID+100 (各 ID 番号に 100 を加算します)。この
演算子を使用する式で使用される列は、数値データ型である必要があり
ます。
- 別の値から値を減算します。
MANAGER_ID-100 (各 ID 番号から 100 を減算します)。この演算
子を使用する式で使用される列は、数値データ型である必要があります。
% 除算式の残りの部分を値として使用します。
%SALARY/7 (Salary 列の値を 7 で除算し、式の剰余を列値として
使用します)。
/ ある値を別の値に分割します。
SALARY/.16 (給与列の値を .16 で割ります。
※除算式の 2 つの値が整数 (小数点以下の桁数のない 2 つの
NUMERIC 列) で、結果が小数値の場合、返される結果は 0 になり
ます。
* SALARY*.16 (給与列の値に .16 を乗算します。これは、給与から差
し引かれる税の計算に使用できます)。
22
Functions / 関数
式を作成するために使用できる SQLite 関数について説明します。式ビルダは、関数は次のカテゴリに分けられます。
• Strings
• LOB
• Numeric
• NULL check
• Date and Time
• Operation
• Data enrichment
• Other
• Hash
• User defined
23
Functions / 関数
関数 説明
lower(x)
下限(x)関数は、文字列 x のコピーを返し、すべての文字を小文字に変換します。デフォルトの組み込みの lower() 関数は、
ASCII 文字に対してのみ機能します。
ltrim(x,y)
ltrim(x,y) 関数は、y に現れるすべての文字を x の左側から削除することによって、文字列を返します。y に値がない場合、
ltrim(x) は x の左側からスペースを削除します。
replace(x,y,z) replace(x,y,z) 関数は、文字列 x に含まれる文字列 y が出現するたびに文字列 z を置換して形成された文字列を返します。
rtrim(x,y)
rtrim(x,y) 関数は、x の右側から y に現れるすべての文字を削除することによって形成された文字列を返します。y に値がない
場合、rtrim(x) は x の右側からスペースを削除します。
substr(x,y,z)
substr(x,y,z) 関数は、y 番目の文字で始まり、z 文字長の入力文字列 x の部分文字列を返します。z を省略すると、
substr(x,y) は y 番目から始まる文字列 x の末尾までのすべての文字を返します。x の左端文字は 1 です。y が負の場合、
部分文字列の最初の文字は、左ではなく右から数えて見つかります。z が負の場合は、y 番目の文字の前にある abs(z) 文字
が戻されます。x が文字列の場合、文字インデックスは実際の UTF-8 文字を参照します。x が BLOB の場合、インデックスはバ
イトを参照します。
trim(x,y)
trim(x,y) 関数は、x の両側から y に現れるすべての文字を削除して、文字列を返します。y に値がない場合、trim(x) は x
の両側からスペースを削除します。
replaceChars(X,Y,Z) replaceChars(X,Y,Z)関数は、文字列X内の文字列 Y (置換される文字) に存在する文字を同じ位置にあるZ (置換文字)
に置き換えます。これは、パスやファイル名から無効な文字を削除する場合に特に便利です。
文字列Z (置換文字) に、文字列Xの対応する位置を持つ文字が含まれていない場合、文字列Zの最初の文字に置き換えられ
ます。
文字列Xに文字列Zに存在しない文字が含まれている場合、元の文字は変更されません。
したがって、たとえば、replaceChars(「abcde」、「abcd」、「123」)を指定すると、1231eが返されます。
Strings
24
Functions / 関数
Lobs
関数 説明
hex(x)
hex() 関数は引数を BLOB として受け取り、BLOB コンテンツの大文字の 16 進
ストリングバージョンを返します。
randomblob(N)
ランダム BLOB(N) 関数は、擬似ランダム バイトを含む N バイト BLOB を返しま
す。N が 1 より小さい場合、1 バイトのランダム BLOB が返されます。
zeroblob(N) 0x00の N バイトで構成されるBLOBが返されます。
25
Functions / 関数
Numeric
関数 説明
abs(x)
abs(x) 関数は、数値引数 X の絶対値を返します。x が数値に変換できない文
字列または BLOB の場合、Abs(x) は 0.0 を返します。
random()
random() 関数は、-9223372036854775808 と
+9223372036854775807の間の擬似乱数整数を返します。
round(x,y)
round(x,y) 関数は、小数点の右側の y 桁に丸められた浮動小数点値 x を返
します。y に値がない場合は、0 と見なされます。
max(x,y...)
複数引数 max() 関数は、最大値を持つ引数を返し、引数が NULL の場合は
NULL を返します。複数引数 max() 関数は、照合関数を定義する引数を左から
右へ検索し、その照合関数を使用してすべての文字列比較を行います。max() の
引数がどれも照合関数を定義しない場合は、BINARY 照合関数が使用されます。
max() は、引数が複数ある場合は単純な関数ですが、引数が 1 つある場合は集
計関数として動作します。
min(x,y...)
複数引数 min() 関数は、最小値を持つ引数を返します。複数引数 min() 関数
は、照合関数を定義する引数を左から右へ検索し、その照合関数を使用してすべ
てのストリング比較を行います。min() の引数がどれも照合関数を定義しない場合、
BINARY 照合関数が使用されます。min() は、引数が複数あるが、引数が 1 つ
ある場合は集計関数として動作する単純な関数であることに注意してください。
26
Functions / 関数
Null Check
関数 説明
coalesce(x,y...)
coalesce() 関数は、最初の NULL 以外の引数のコピーを返し、すべて
の引数が NULL の場合は NULL を返します。Coalesce() には少なくと
も 2 つの引数があります。
ifnull(x,y)
ifnull() 関数は、最初の NULL 以外の引数のコピーを返し、両方の引
数が NULL の場合は NULL を返します。Ifnull() は、引数を 2 つ持つ
必要があります。ifnull() 関数は、2 つの引数を持つ coalesce() と同じ
です。
nullif(x,y)
引数が異なる場合は、nullif(x,y) 関数は最初の引数のコピーを返し、引
数が同じ場合は NULL を返します。nullif(x,y) 関数は、照合関数を定
義する引数を左から右へ検索し、その照合関数を使用してすべての文字
列比較を行います。nullif() の引数がどちらも照合関数を定義しない場
合、BINARY が使用されます。
27
Functions / 関数
Date and Time
関数 説明
date(timestring, modifier, modifier...) 日付を YYYY-MM-DD 形式で返します。
time(timestring, modifier, modifier...) 時刻を HH:MM:SS 形式で返します。
datetime(timestring, modifier, modifier...) 日付と時刻を YYYY-MM-DD HH:MM:SS 形式で返します。
julianday(timestring, modifier, modifier...)
julianday() 関数は、4714 B.Cの 11 月 24 日にグリニッジ
で正午から経過した日数を返します。
strftime(format, timestring, modifier, modifier...)
strftime() ルーチンは、最初の引数として指定された書式指
定文字列に従って書式設定された日付を返します。これは、次
の変数をサポートします。
• %d: 月の日
• %H:時間 00-24
• %f: ** 秒の小数部 SS。SSS
• %j: 001-366 年の日
• %J: ** ユリウス日番号
• %m: 月 01-12
• %M: 分 00-59
• %s: 1970-01-01 以降の秒
• %S: 秒 00-59
• %w: 曜日 0-6 日曜日 ==0
• %W: 年の週 00-53
• %Y:年 0000-9999
• %%: %
28
Functions / 関数
Operations
関数 説明
operation_indicator(value_on_delete、
value_on_update、value_on_insert)
operation_indicator関数が単独で呼び出されるか、式の一部として呼び出されると、ソー
ス エンドポイントから削除されたレコードはターゲット エンドポイントから削除されません。代わり
に、対応するターゲット レコードに、ソースから削除されたことを示すフラグが付きます (ユーザー
指定の値を使用)。operation_indicator関数では、ソース エンドポイントに挿入または更
新されたレコードを示す値も指定する必要があります。
※ operation_indicator関数は、主キーを持たないテーブルではサポートされていません。
※ フラグ値の専用の列を追加することをお勧めします。列を追加する方法については、「変換
タブの使用」を参照してください。
関数値を指定するには、次の手順に従います。
value_on_delete、value_on_insert、およびvalue_on_updateを、ターゲット エンド
ポイントに表示する値に置き換えます。
値は、対応する列の型に従って書式設定する必要があります。
列タイプがINT4の場合の例 :
operation_indicator('1'、'0'、'0’)
列の型がSTRINGの場合の例 :
operation_indicator('削除済み'、'更新済み'、'挿入済み')
29
Functions / 関数
関数 説明
source_lookup(TTL、'SCHM'、TBL'、'EXP'、'COND'、COND_PARAMS) ソース エンドポイントから追加のデータを取得するために使用します。
target_lookup(TTL、'SCHM'、TBL'、'EXP'、'COND'、COND_PARAMS) ターゲット エンドポイントから追加のデータを取得するために使用します。
• データエンリッチメント関数を使用すると、選択したソーステーブルを、ソースまたはターゲットエンドポイントに配置さ
れた他のレコードのデータで補強できます。
• データエンリッチメント関数の実用的なアプリケーションには、コード検索やマスターレコード検索(例えば、人の名前
を検索するための社会保障番号の検索)が含まれます。
※Amazon Redshiftはサポートされていません。
• 次の表は、テーブル変換とグローバル変換の両方で使用できるソースおよびターゲットの参照関数を示しています。
これらの関数で使用できるパラメータの説明については、以下の「入力パラメータ」を参照してください。
Data Enrichment
30
Functions / 関数
入力パラメータ
ルックアップ関数の入力パラメータを指定できる値は、次の表で説明します。
関数 説明
TTL
• TTL (存続時間)は'COND'戻り値がキャッシュされる時間です。'COND'戻り値を
キャッシュすると、Qlik Replicateがソース/ターゲット エンドポイントにアクセスする頻
度が減少し、パフォーマンスが向上します。デフォルトは存在しないので、TTL値を指
定する必要があります。
• <秒> - 'COND'戻り値をキャッシュする時間 (秒単位)。頻繁に更新されるデータ
のキャッシュ時間 (例えば3)を指定し、ほとんど変更されないデータのキャッシュ時間を
長く指定します。
• 'NO_CACHING'- 'COND'の戻り値をキャッシュしない場合は 'NO_CACHING'
を指定します。これは、常に更新されるデータ(株価など)に推奨されます。
• 'NO_EXPIRATION'- 更新されていないデータの場合は、 'NO_EXPIRATION'
を指定して、Functionsの戻り値をキャッシュに永続的に格納します。
'SCHM' スキーマ名。
'TBL' ルックアップを実行するテーブル。
'EXP'
• 参照テーブルからデータを取得する式。
※ 式の構文は、アクセスするエンドポイントにネイティブである必要があります。
• 結果は単一の列になります。可能な式には、col1、col1+5、max(col1)が含まれ
ます。
※ LOB 列全体はサポートされていません。レプリケーションに制限付き LOB 列
を含める方法については、「Metadata」タブの説明を参照してください。
• 列 (変換とフィルターのみ)、ヘッダー、およびメタデータ (グローバル変換のみ) も式で
使用でき、エンドポイントに対してルックアップ ステートメントが実行される前に評価さ
れます。
関数 説明
'COND'
• 検索ステートメントの条件。
※ 条件構文は、アクセスするエンドポイントにネイティブである必要があります。
CONDは、すべての必須フィールドを参照する単一のフィールドです。
• ルックアップテーブルが Oracle にある場合の例:
'Fieldname1=:1 and Fieldname2=:2 and Fieldname3 =:3’
• 参照テーブルが SQL Server に存在する場合の例
'Fieldname1=? and Fieldname2=? and Fieldname3=?’
• 列 (変換とフィルターのみ)、ヘッダー、およびメタデータ (グローバル変換のみ) も式で
使用でき、エンドポイントに対してルックアップ ステートメントが実行される前に評価さ
れます。
COND_PARA
MS
• CONDパラメーターに必要なパラメーター。
• COND_PARAMS (条件パラメーター) は、単一のフィールドではなく、フィールドのリ
ストです。
構文:
$FIELDNAME1 , $FIELDNAME2 , $FIELDNAME3
例:
source_lookup(
10000 ,
'HR' ,
'DEPARTMENTS' ,
'DEPARTMENT_NAME’ ,
'COMPANY_ID=? and DIVISION_ID=? and DEPT_ID=?' ,
$COMP_ID , $DIV_ID , $DEPT_ID )
• 効率を向上させるために、ソース/ターゲットのルックアップ テーブルに、指定したルックアップ フィールドのインデックスを作成する必要があります。
31
Functions / 関数
データの情報付加の例
次の例では、HR.JOB_HISTORYテーブルにDEPARTMENT_NAME列を追加する必要があります。DEPARTMENT_NAME列は ソース エンドポイントの HR.DEPARTMENTS テーブ
ルにあります。
Full Loadの完了後のHR.JOB_HISTORYテーブル
列が追加される前の HR.JOB_HISTORYテーブル
32
Functions / 関数
DEPARTMENT_NAME列を追加するには、次の手順を実行する必要があります。
1. 新しいタスクを作成し、レプリケーションの対象としてHR.JOB_HISTORYテーブルを選択します。
2. HR. JOB_HISTORYテーブルに[New Columns]変換を適用します。
3. Expression Builderを開き、[Function] タブから[Data Enrichment] を選択します。
4. source_lookup関数を選択し、次のように構成します (ソース エンドポイントのネイティブ構文を使用)。
ルックアップテーブルが Oracle にある場合は、次の手順を実行します。
source_lookup(10000,'HR','DEPARTMENTS','DEPARTMENT_NAME','DEPARTMENT_ID=:1',$DEPARTMENT_ID)
ルックアップテーブルが SQL Server に存在する場合は、次の手順を実行します。
source_lookup(10000,'HR','DEPARTMENTS','[DEPARTMENT_NAME]’, [DEPARTMENT]=?',$DEPARTMENT_ID)
• 10000は TTL パラメータです。
• HRはスキーマ名です。
• 'DEPARTMENTSはテーブル名です。
• DEPARTMENT_NAMEは式です。
• DEPARTMENT_ID=:1 (またはマイクロソフト SQL Server 上の? )が条件です。
• $DEPARTMENT_IDは条件パラメータです。
5. タスクを実行します。
33
Functions / 関数
関数 説明
length(x) 文字列値 x の場合、length(x) 関数は、先頭の NULL 文字の前の x の前の
文字数 (バイトではない) を返します。
x が NULL の場合、長さ(x) は NULL です。x が数値の場合、length(X) は
X の文字列表現の長さを返します。
like(x,y,z) like() 関数は、"Y LIKE X [ESCAPE Z]"式を実装するために使用されます。
ESCAPE (z) 句はオプションです。z 節がある場合は、like() 関数が 3 つの引数
を指定して呼び出されます。それ以外の場合は、2 つの引数を指定して呼び出され
ます。
typeof(x) typeof(x) 関数は、式 xのデータ型を示す文字列を返します。
Other Functions
34
Functions / 関数
Hash
• Hash 関数は、入力された列のハッシュ値を生成し (SHA-256 アルゴリズムを使用して) 生成し、生成されたハッシュ値の 16 進値を返します。
• 式で関数を使用するには、hash_sha256(x)関数を[Build Expression] ウィンドウに追加し、"x" を目的のソース列名に置き換えます。
• この関数は、特に機密情報をマスキングする場合に便利です。たとえば、以下の式では、従業員の電子メール アドレスを難読化するために Hash 関数が使用されています。
35
User-defined transformations / ユーザー定義変換
• Replicateの組み込み変換で提供されない機能を必要とするお客様は、独自の変換を作成し、その変換にExpression Builderからアクセスできます。
• 独立したメモリとログ記録ルーチンを作成する必要がなくなる、レプリケートのメモリ管理機能とログ記録機能を利用できるReplicate Add-ons API を使
用することを推奨します。詳細については、「Replicate add-ons API」を参照してください。
• 以下の手順は、次のサンプル ファイルに基づいています。
<INSTALL_DIR>addonssamplesMyTransformation
• パスは Linux でも同じですが、スラッシュ (/) ではなく円記号 () を使用します。同様に、以下の説明は DLL ファイル (Windows) を指します
が、Linux では SO ファイルにする必要があります。
36
User-defined transformations / ユーザー定義変換
デフォルトのアドオン名の変更
• 既定のアドオン名 (MyTransformation) は、必要に応じ以下のファイルの名前を変更するだけで変更できます。
<INSTALL_DIR>addonssamplesMyTransformationMyTransformationMyTransformation.dll
• DLL の名前を変更する場合は、以下に説明するaddons_def.json.sampleファイルを編集するときに新しい名前を指定する必要がある場
合もあります (使用するパラメーターに応じて異なります)。
37
ユーザー定義変換の作成
ユーザー定義変換を作成するには、次の手順に従います。
1. 次のエクスポートされた初期化関数を実装する共有ライブラリを作成します。
typedef int AR_ADDON_INIT_FUNC(AR_ADDON_CONTEXT *context);
すべての型とプロトタイプは<INSTALL_DIR>¥addons¥includeの下にあるar_addon.hとar_addon_transformation.hファイルに定義されています。
2. 共有ライブラリが次の場所に保存されていることを確認します。
<INSTALL_DIR>addonssamplesaddon_name
※高可用性セットアップ で作業する場合、作成したバイナリはすべてのクラスタ インスタンスにインストールする必要があります。
38
ユーザー定義変換の作成
3. <INSTALL_DIR>¥addonsの下にあるaddons_def.json.sampleファイルにライブラリを登録します。
• nameは DLL の論理名です (任意の名前を指定できます)。lib_pathパラメータを使用して DLL パスを指定しない場合 (下記参照)、DLL
ファイルは<INSTALL_DIR>¥addons¥<addon_name>に存在する必要があります。Linux では、<addon_name>フォルダは
手動で作成する必要があり、デフォルトのアドオン名 (MyTransformation) か、新しい名前 (変更した場合) にする必要があります。
• typeは、DLL を読み込むタイミングを指定するオプションのパラメーターです。現在サポートされている値はSTARTUPだけです。
• lib_pathは、DLL の完全パスです (例:C:¥Transforms¥MyManipulator.dll)。これは、DLL が
<INSTALL_DIR>¥addons¥<addon_name>に存在しない場合にのみ必要です (上記のnameパラメーターの説明に記載)。
• init_functionは、DLL の生成に使用される C ファイルに表示される関数名です。
4. ファイルをaddons_def.jsonという名前で保存します。
{
"addons": [{
"name": "MyTransformation",
"type": "STARTUP",
//"lib_path": "C:Program FilesAttunity ReplicateaddonssamplesMyTransformationMyTransformation.dll",
//"lib_path": "/opt/attunity/replicate/addons/samples/MyTransformation/MyTransformation.so",
"init_function": "my_transformation_init_func"
}]
}
39
ユーザー定義変換の作成
5. 次の例のように、addon 初期化関数 (ステップ 1 で説明) に新しい関数を登録します。
USER_DEFINED_TRANSFORMATION_DEF *transdef = GET_AR_AO_TRANSFORMATION_DEF();
transdef->displayName = "prefix_with(X, Y)";
transdef->functionName = "prefix_with";
transdef->description = "prefix_with adds the prefix <Y_> to a given string X";
transdef->func = trans_prefix_with;
transdef->nArgs = 2;
AR_AO_REGISRATION->register_user_defined_transformation(transdef);
6. Qlik Replicateサーバーサービスを再起動します。
新しい “prefix_with” 関数は、Expression Builderの[Functions->User Defined] の下で使用できるようになります。
www.qlik.com/sap

Qlik ReplicateにおけるExpression Builderの利用方法

  • 1.
    © 2019 QlikTechInternational AB. All rights reserved. Expression Builder (式ビルダ)の詳細 クリックテック・ジャパン株式会社
  • 2.
    © 2019 QlikTechInternational AB. All rights reserved. 2 • Expression Builderの利用方法 • Element Paneで利用可能な要素 アジェンダ
  • 3.
    © 2019 QlikTechInternational AB. All rights reserved. 3 Expression Builder の利用方法
  • 4.
    4 Expression Builderの概要 Expression Builderの4つの主要部分を示す例を示します。フィルタ、変換、またはグローバル変換のどちらの式を作成するかによって利用できるオプションが異なる場合があります。 •Elements Pane(左側): このペインには、式に追加できる要素が含まれています。  Metadata: グローバル変換を使用する場合にのみ使用可能  Input: 変換またはフィルターを使用する場合にのみ使用可能  Header: グローバル変換の場合、このタブは[Add Column]を選択した 場合にのみ使用できます。  Variables: 変数  Operators: 演算子  Functions: 関数 • Build Expressionパネル:  作成する式を入力します。列や演算子などの要素をボックスに移動します。この ボックスには、式の全部または一部を入力することもできます。 • Parse Expressionパネル:  式を作成した後、[Parse Expression] をクリックして式のパラメーターを一 覧表示します。その後、各パラメータに値または引数を入力できます。  パネルの上部にはOperatorツールバーがあります。このツールバーには、最も一 般的な演算子が含まれています。 • Test Expressionパネル:  このパネルには、式の各パラメーターに値を指定した後に実行できるテストの結 果が表示されます。
  • 5.
  • 6.
    6 式の作成 – Operatorツールバー Operatorツールバー •[Operator] ツールバーは、[Build Expression] ボックスの上にあります。この関数には最も一般的な演算子が含まれているため、式に簡単に追加できます。 • 加算、減算、乗算、除算、割合、等しくない、等しい、連結、AND、OR の演算子を使用できます。 [オペレータ]ツールバーを使用するには: 1. [Build Expression] ボックスで、演算子を追加する場所をクリックします。 2. 追加する演算子をクリックします。式に追加されます。
  • 7.
    7 式の解析 式を解析して、そのパラメーターを決定し、式が有効かどうかを判断できます。 式を解析するには 1. [Parse Expression]をクリックします。 式が有効でない場合は、[Expression Builder] ウィンドウの下部に 赤でエラー メッセージが書き込まれます。  式が有効な場合は、パラメーターが[Parse Expression] セクション に表示されます。
  • 8.
  • 9.
  • 10.
    10 Expression Builder 変換、フィルター、およびグローバル変換の式を構築するには、次の型の要素を使用できます。 タブを選択して、要素を選択します。 • Columns/列(変換とフィルターのみ) • Data/データ (グローバル変換のみ) • Metadata/メタデータ (グローバル変換のみ) • Variables/変数 • Operators/演算子 • Functions/関数 • Headers/ヘッダー • User-defined transformations/ユーザー定義変換
  • 11.
    11 Data (Global Transformationsのみ) •このタブでは、変更された列データ、元のソース列データを利用する式を作成できます。次のオプションを使用できます。  $AR_M_MODIFIED_COLUMN_DATA - グローバル変換を使用して置換または変更されたデータ(Replace column valueなど)を指定  $AR_M_SOURCE_COLUMN_DATA- ソースの元のデータを指定 • 例:“Age” という名前のソース列を対象とする場合で、50 歳から 80 歳までの市民のすべてのレコードを除外する式を次のように定義できます。 $AR_M_SOURCE_COLUMN_DATA > '50' AND $AR_M_SOURCE_COLUMN_DATA < '80'
  • 12.
    12 Columns /列 (TransformationとFilterのみ) このタブには、作業しているテーブルの列が一覧表示されます。 ※NUMBER の条件が 19 桁を超える条件を含む式は無効です。たとえば、次の式は無効です。 case when $ID==12345678910111213149 then '1' else '0' end
  • 13.
    13 Metadata (Global Transformationsのみ) [Metadata]タブには、式で使用できる変数が含まれています。  名前にMODIFIEDを持つ変数は、グローバル変換を使用して置換または変更されたメタデータを指定するために使用  MODIFIEDを使用しない変数名は、ソース データベースで定義されている元のメタデータを指定するために使用 • AR_M_MODIFIED_SCHEMA - 変更されたソース スキーマ名。 • AR_M_MODIFIED_TABLE_NAME - 変更されたソース テーブル名。 • AR_M_MODIFIED_COLUMN_NAME - ソース テーブル内の変更された列名。 • AR_M_MODIFIED_DATATYPE_NAME - ソース テーブル内の列の変更されたデータ型。 • AR_M_MODIFIED_DATATYPE_LENGTH - ソース テーブル内の列の変更されたデータ型の長さ。 • AR_M_MODIFIED_DATATYPE_PRECISION - ソース テーブル内の列の変更されたデータ型の精度。 • AR_M_MODIFIED_DATATYPE_SCALE - ソース テーブル内の列の変更されたデータ型のスケール。 • AR_M_SOURCE_SCHEMA - ソース スキーマの名前。 • AR_M_SOURCE_TABLE_NAME - ソース テーブルの名前。 • AR_M_SOURCE_COLUMN_NAME - ソース テーブルの列の名前。 • AR_M_SOURCE_DATATYPE_NAME - ソース テーブル内の列のデータ型。 • AR_M_SOURCE_DATATYPE_LENGTH - ソース テーブル内の列のデータ型の長さ。 • AR_M_SOURCE_DATATYPE_PRECISION - ソース テーブル内の列のデータ型の精度。 • AR_M_SOURCE_DATATYPE_SCALE - ソース テーブル内の列のデータ型のスケール。
  • 14.
    14 Header • 変換を定義するときに、ヘッダーを含む式を作成することで、どのヘッダーをレプリケートするかを決定できます。(デフォルトでは、ソーステーブルのヘッダーは ターゲットにレプリケートされません。) • ヘッダー値を使用してフィルターを作成できます。ヘッダーフィルターは、変更処理中に適用されます。 ※ Headerタブは、フィルターと変換に使用できます。グローバル変換で使用できるのは、[Add Column] を選択した場合だけです。 ※ ヘッダー列は、明示的に指定されていない限り、すべてのエンドポイントでサポートされます。
  • 15.
    15 Header / ヘッダー ヘッダー名変更プロセスの値 Full Loadの値 データ型 AR_H_CHANGE_SEQ タスクのすべての Change テーブルに共通する、単調に増加する変更シーケンサー。変更シーケンス の形式は次のとおりです (レプリケートサーバーの UTC 時刻は時間です)。 YYYYMMDhDHHmSShhxxxxxxxxxxxxxxxxxxxxxxxxx  YYYY は 4 桁の年です (2012 など)  MM は 2 桁の月です (範囲は 01 から 12 まで)  HH は、その日の時間です (範囲は 00 から 23 まで)  mmは時間の分です(範囲は00から59まで)  SS は分単位の秒です (範囲は 00 から 59 まで)  hh は 2 番目の 100 分の 1 です (範囲は 00 から 99 まで)  xxxxxxxxxxxxxxxxxxxxxx は、19 桁の 0 個のプレフィックス付き変更番号 (タスクごと にグローバル) です。 通常、時間部分は、変更レコードを含むトランザクションのコミット時間を指します。Qlik Replicateに はシーケンス番号の単調性を維持するロジックが含まれているため、エンドポイント時間を変更または調 整すると、同じタイムスタンプ内にあるように見えても変更数が増えているように見える複数の変更が発 生する可能性があります。 xxx…xxx は、通常、BEFORE-IMAGE レコードの場合は、一致する UPDATE レコードの変更番 号と同じである (たとえば、BEFORE-IMAGE の変更番号が 1000 で、UPDATE の変更番号が 1001 の場合は、両方とも 1001) という点を除いて、データレコードからの内部変更番号です。これ により、テーブルとそれ自体の間で単純な左外部結合が可能になり、左側では特定の時点までスキャ ンしますが、operation=before-imageをフィルタリングし、右側はchange_operが「B」である同じ change_seqに結合します。 空 VARCHAR(35) AR_H_STREAM_POSITION ソースのストリーム位置値 (通常は SCN または LSN) 。これによりReplicateタスクを最後に処理さ れたイベントから再開できます。 空の文字列 STRING AR_H_TIMESTAMP Replicateサーバーのローカル時刻として表される変更操作のタイムスタンプ。データベースとレプリケー トサーバーが同じタイム ゾーンにある場合、タイムスタンプは実際の変更操作をほぼ表します。 現在のタイムスタンプ DATETIME
  • 16.
    16 Header / ヘッダー ヘッダー名変更プロセスの値 Full Loadの値 データ型 AR_H_TRANSACTION_ID 変更レコードが属するトランザクションの ID。実際の値は 128 ビット のトランザクション ID の 16 進数文字列です。 ※ トランザクション ID は一意であるとは保証されないため、レポートまたはその一意性に依 存する他の操作の作成には使用しないでください。 空 VARCHAR (32) AR_H_COMMIT_TIMESTAMP Replicateサーバーの時刻に従って、ソース データベースのコミット タイムスタンプ。ソース データベースとReplicateサーバーが同じタイム ゾーンにある場合、タイムスタンプはソース データベースの実際のコミットのおおよその時間になります。 現在のタイムスタンプ DATETIME AR_H_DB_COMMIT_TIMESTAMP データベース サーバの時刻に基づいて、ソース データベースのコミット タイムスタンプ。 ※ 次のソース エンドポイントにのみ: Oracle, Microsoft SQL Server, IBM DB2 for z/OS, Microsoft Azure SQL Managed Instance, and Amazon RDS for SQL Server NULL DATETIME AR_H_OPERATION INSERT, UPDATE, DELETEのいずれか。 INSERT STRING AR_H_USER ソース データベースに変更を加えたユーザー。 ※ 次のソース エンドポイントにのみ:Microsoft SQL Server、Microsoft Azure SQL Managed Instance、Amazon RDS for SQL Server、IBM Informix、IBM DB2 for z/OS、IBM DB2 for LUW、Oracle、File、AIS-based sources、 SAP Sybase ASE 空 STRING AR_H_JOB_NAME ソース・データベースに変更を加えた iSeries ジョブ。 ※ IBM DB2 for iSeries ソース・エンドポイントにのみ関連します。 空 STRING AR_H_PROGRAM_NAME ソース・データベースに変更を加えた iSeries プログラム。 ※ このヘッダーは、レプリケート2021 年 5 月 SR3 からのみ使用できます。 ※ IBM DB2 for iSeries ソース・エンドポイントにのみ。 空 STRING
  • 17.
    17 Variables / 変数 式には、次の表に示す変数(実行時に置き換えられる変数) を含めることができます。 変数名 説明 データ型 AR_V_HOST_NAME Qlik Replicateサーバーがインストールされているマシンのホスト名。 STRING (50) AR_V_SOURCE_NAME エンドポイント設定で定義されたソース エンドポイントの論理名。 STRING (50) AR_V_TARGET_NAME エンドポイント設定で定義されたターゲット エンドポイントの論理名。 STRING (50) AR_V_TASK_NAME タスク名。 STRING (50) AR_V_TASK_UUID タスクを識別する一意の文字列 (ユニバーサル一意識別子)。 STRING (50) AR_V_RELOAD_TIME ソース テーブルが再読み込みされた時刻。 DATETIME (6) AR_V_START_TIME タスクが開始された時刻。 DATETIME (6)
  • 18.
    18 Operators / 演算子 式を作成するために使用できるSQLite 演算子について説明します。演算子は次のカテゴリに分けられます。 文字列演算子 論理演算子 数学演算子
  • 19.
    19 Operators / 演算子 文字列演算子 演算子説明 || 文字列を連結します。  $FIRST_NAME || $LAST_NAME
  • 20.
    20 Operators / 演算子 論理演算子 演算子説明 != or <> • 等しくない  $SALARY!=100000 IS • 同じ  $HIRE_DATE IS 2014-09-29 • 一方または両方のオペランドが NULL でない限り、IS は = と同じ関数を実行します。この場合、 両方のオペランドが NULL の場合、IS 演算子は 1 (true) と評価されます。一方のオペランドが NULL で、もう一方のオペランドが NULL でない場合、IS 演算子は 0 (false) と評価されます。 IS NOT • 同じではない  $HIRE_DATE IS NOT 2014-09-29 • 一方または両方のオペランドが NULL でない限り、IS は!=と同じように機能しません。この場合、 両方のオペランドが NULL の場合、IS NOT 演算子は 0 (false) と評価されます。一方のオペ ランドが NULL で、もう一方のオペランドが NULL でない場合、IS NOT 演算子は 1 (true) と 評価されます。 IN • IN 演算子は、左に 1 つのスカラー オペランドを取り、右側のベクトル オペランドを 0 個以上のス カラーの明示的なリストまたは単一のサブクエリによって形成します。IN 演算子の右オペランドがサ ブクエリの場合、サブクエリは単一の結果列を持つ必要があります。右オペランドが空のセットの場 合、IN の結果は、左オペランドに関係なく、左オペランドが NULL であっても false になります。 • SQLite では、IN 演算子の右側にあるスカラー値の括弧付きリストを空のリストにできますが、他 のほとんどの SQL エンドポイント エンジンと SQL92 標準では、リストに少なくとも 1 つの要素を 含める必要があります。 LIKE • LIKE 演算子は、パターン・マッチングの比較を行います。LIKE 演算子の右側のオペランドにはパ ターンが含まれ、左オペランドにはパターンと一致する文字列が含まれます。LIKE パターンのパー セント記号 ("%") は、文字列内の 0 個以上の文字の任意のシーケンスと一致します。LIKE パターンのアンダースコア ("_") は、文字列内の任意の 1 文字と一致します。その他の文字は、 それ自体または小文字/大文字に対応します。(デフォルトでは、SQLite は ASCII 文字の大文 字/小文字のみを認識します。LIKE 演算子は、ASCII の範囲を超える Unicode 文字の場合、 デフォルトで大文字と小文字が区別されます。 • たとえば、'a' LIKE 'A' という式は TRUE ですが、'æ' LIKE 'Æ' は FALSE です)。 • LIKE の前に NOT キーワードを付けることができます。 CASE • 条件のリストを評価し、複数の可能な結果式の 1 つを返します。  例 1:WHEN $NEWEST = 'Y' THEN '1' ELSE '0' END  例 2: case length($month) when 2 then $year||$month when 1 then $year||0||$month end 演算子 説明 GLOB • GLOB 演算子は LIKE 演算子と同じように動作しますが、ワイルドカードには UNIX ファイル の GLOB構文を使用します。GLOB は大文字と小文字を区別します。 • GLOB は、テストの感覚を反転させるために NOT キーワードを前に付けることができます。イン フィックス GLOB 演算子は、関数 glob(Y,X) を呼び出すことによって実装され、その関数をオー バーライドすることによって変更できます。 MATCH • MATCH 演算子は、match() アプリケーション定義関数の特殊な構文です。デフォルトの match() 関数の実装は例外を発生させるので、実際には何の役にも立ちません。しかし、拡張 機能は、より役に立つロジックで match() 関数をオーバーライドできます。 REGEXP • REGEXP 演算子は、regexp() ユーザー関数の特殊な構文です。regexp() ユーザー関数は デフォルトで定義されていないので、REGEXP 演算子を使用すると、通常はエラー・メッセージが 表示されます。 AND • 両方のオペランドが真です。  $MANAGER_ID AND EMPLOYEE ID >100 OR • いずれかのオペランドが true です。  $MANAGER_ID OR EMPLOYEE ID >100 << • ビット単位シフト左。  x << n  x の左に n ビットずつシフトする。 >> • ビット単位のシフト右。  x >> n  x の右に n ビットずつシフトする。 & • 単項and | • 単項or < • より小さい  $SALARY<100000 <= • 以下の値  $SALARY<=100000 > • より大きい  $SALARY>100000 >= • 次の値以上の値です  $SALARY>=100000 = or == • 次の値に等しい  $SALARY=100000
  • 21.
    21 Operators / 演算子 数学演算子 演算子説明 + 2 つの値を加算します。 DEPARTMENT_ID+100 (各 ID 番号に 100 を加算します)。この 演算子を使用する式で使用される列は、数値データ型である必要があり ます。 - 別の値から値を減算します。 MANAGER_ID-100 (各 ID 番号から 100 を減算します)。この演算 子を使用する式で使用される列は、数値データ型である必要があります。 % 除算式の残りの部分を値として使用します。 %SALARY/7 (Salary 列の値を 7 で除算し、式の剰余を列値として 使用します)。 / ある値を別の値に分割します。 SALARY/.16 (給与列の値を .16 で割ります。 ※除算式の 2 つの値が整数 (小数点以下の桁数のない 2 つの NUMERIC 列) で、結果が小数値の場合、返される結果は 0 になり ます。 * SALARY*.16 (給与列の値に .16 を乗算します。これは、給与から差 し引かれる税の計算に使用できます)。
  • 22.
    22 Functions / 関数 式を作成するために使用できるSQLite 関数について説明します。式ビルダは、関数は次のカテゴリに分けられます。 • Strings • LOB • Numeric • NULL check • Date and Time • Operation • Data enrichment • Other • Hash • User defined
  • 23.
    23 Functions / 関数 関数説明 lower(x) 下限(x)関数は、文字列 x のコピーを返し、すべての文字を小文字に変換します。デフォルトの組み込みの lower() 関数は、 ASCII 文字に対してのみ機能します。 ltrim(x,y) ltrim(x,y) 関数は、y に現れるすべての文字を x の左側から削除することによって、文字列を返します。y に値がない場合、 ltrim(x) は x の左側からスペースを削除します。 replace(x,y,z) replace(x,y,z) 関数は、文字列 x に含まれる文字列 y が出現するたびに文字列 z を置換して形成された文字列を返します。 rtrim(x,y) rtrim(x,y) 関数は、x の右側から y に現れるすべての文字を削除することによって形成された文字列を返します。y に値がない 場合、rtrim(x) は x の右側からスペースを削除します。 substr(x,y,z) substr(x,y,z) 関数は、y 番目の文字で始まり、z 文字長の入力文字列 x の部分文字列を返します。z を省略すると、 substr(x,y) は y 番目から始まる文字列 x の末尾までのすべての文字を返します。x の左端文字は 1 です。y が負の場合、 部分文字列の最初の文字は、左ではなく右から数えて見つかります。z が負の場合は、y 番目の文字の前にある abs(z) 文字 が戻されます。x が文字列の場合、文字インデックスは実際の UTF-8 文字を参照します。x が BLOB の場合、インデックスはバ イトを参照します。 trim(x,y) trim(x,y) 関数は、x の両側から y に現れるすべての文字を削除して、文字列を返します。y に値がない場合、trim(x) は x の両側からスペースを削除します。 replaceChars(X,Y,Z) replaceChars(X,Y,Z)関数は、文字列X内の文字列 Y (置換される文字) に存在する文字を同じ位置にあるZ (置換文字) に置き換えます。これは、パスやファイル名から無効な文字を削除する場合に特に便利です。 文字列Z (置換文字) に、文字列Xの対応する位置を持つ文字が含まれていない場合、文字列Zの最初の文字に置き換えられ ます。 文字列Xに文字列Zに存在しない文字が含まれている場合、元の文字は変更されません。 したがって、たとえば、replaceChars(「abcde」、「abcd」、「123」)を指定すると、1231eが返されます。 Strings
  • 24.
    24 Functions / 関数 Lobs 関数説明 hex(x) hex() 関数は引数を BLOB として受け取り、BLOB コンテンツの大文字の 16 進 ストリングバージョンを返します。 randomblob(N) ランダム BLOB(N) 関数は、擬似ランダム バイトを含む N バイト BLOB を返しま す。N が 1 より小さい場合、1 バイトのランダム BLOB が返されます。 zeroblob(N) 0x00の N バイトで構成されるBLOBが返されます。
  • 25.
    25 Functions / 関数 Numeric 関数説明 abs(x) abs(x) 関数は、数値引数 X の絶対値を返します。x が数値に変換できない文 字列または BLOB の場合、Abs(x) は 0.0 を返します。 random() random() 関数は、-9223372036854775808 と +9223372036854775807の間の擬似乱数整数を返します。 round(x,y) round(x,y) 関数は、小数点の右側の y 桁に丸められた浮動小数点値 x を返 します。y に値がない場合は、0 と見なされます。 max(x,y...) 複数引数 max() 関数は、最大値を持つ引数を返し、引数が NULL の場合は NULL を返します。複数引数 max() 関数は、照合関数を定義する引数を左から 右へ検索し、その照合関数を使用してすべての文字列比較を行います。max() の 引数がどれも照合関数を定義しない場合は、BINARY 照合関数が使用されます。 max() は、引数が複数ある場合は単純な関数ですが、引数が 1 つある場合は集 計関数として動作します。 min(x,y...) 複数引数 min() 関数は、最小値を持つ引数を返します。複数引数 min() 関数 は、照合関数を定義する引数を左から右へ検索し、その照合関数を使用してすべ てのストリング比較を行います。min() の引数がどれも照合関数を定義しない場合、 BINARY 照合関数が使用されます。min() は、引数が複数あるが、引数が 1 つ ある場合は集計関数として動作する単純な関数であることに注意してください。
  • 26.
    26 Functions / 関数 NullCheck 関数 説明 coalesce(x,y...) coalesce() 関数は、最初の NULL 以外の引数のコピーを返し、すべて の引数が NULL の場合は NULL を返します。Coalesce() には少なくと も 2 つの引数があります。 ifnull(x,y) ifnull() 関数は、最初の NULL 以外の引数のコピーを返し、両方の引 数が NULL の場合は NULL を返します。Ifnull() は、引数を 2 つ持つ 必要があります。ifnull() 関数は、2 つの引数を持つ coalesce() と同じ です。 nullif(x,y) 引数が異なる場合は、nullif(x,y) 関数は最初の引数のコピーを返し、引 数が同じ場合は NULL を返します。nullif(x,y) 関数は、照合関数を定 義する引数を左から右へ検索し、その照合関数を使用してすべての文字 列比較を行います。nullif() の引数がどちらも照合関数を定義しない場 合、BINARY が使用されます。
  • 27.
    27 Functions / 関数 Dateand Time 関数 説明 date(timestring, modifier, modifier...) 日付を YYYY-MM-DD 形式で返します。 time(timestring, modifier, modifier...) 時刻を HH:MM:SS 形式で返します。 datetime(timestring, modifier, modifier...) 日付と時刻を YYYY-MM-DD HH:MM:SS 形式で返します。 julianday(timestring, modifier, modifier...) julianday() 関数は、4714 B.Cの 11 月 24 日にグリニッジ で正午から経過した日数を返します。 strftime(format, timestring, modifier, modifier...) strftime() ルーチンは、最初の引数として指定された書式指 定文字列に従って書式設定された日付を返します。これは、次 の変数をサポートします。 • %d: 月の日 • %H:時間 00-24 • %f: ** 秒の小数部 SS。SSS • %j: 001-366 年の日 • %J: ** ユリウス日番号 • %m: 月 01-12 • %M: 分 00-59 • %s: 1970-01-01 以降の秒 • %S: 秒 00-59 • %w: 曜日 0-6 日曜日 ==0 • %W: 年の週 00-53 • %Y:年 0000-9999 • %%: %
  • 28.
    28 Functions / 関数 Operations 関数説明 operation_indicator(value_on_delete、 value_on_update、value_on_insert) operation_indicator関数が単独で呼び出されるか、式の一部として呼び出されると、ソー ス エンドポイントから削除されたレコードはターゲット エンドポイントから削除されません。代わり に、対応するターゲット レコードに、ソースから削除されたことを示すフラグが付きます (ユーザー 指定の値を使用)。operation_indicator関数では、ソース エンドポイントに挿入または更 新されたレコードを示す値も指定する必要があります。 ※ operation_indicator関数は、主キーを持たないテーブルではサポートされていません。 ※ フラグ値の専用の列を追加することをお勧めします。列を追加する方法については、「変換 タブの使用」を参照してください。 関数値を指定するには、次の手順に従います。 value_on_delete、value_on_insert、およびvalue_on_updateを、ターゲット エンド ポイントに表示する値に置き換えます。 値は、対応する列の型に従って書式設定する必要があります。 列タイプがINT4の場合の例 : operation_indicator('1'、'0'、'0’) 列の型がSTRINGの場合の例 : operation_indicator('削除済み'、'更新済み'、'挿入済み')
  • 29.
    29 Functions / 関数 関数説明 source_lookup(TTL、'SCHM'、TBL'、'EXP'、'COND'、COND_PARAMS) ソース エンドポイントから追加のデータを取得するために使用します。 target_lookup(TTL、'SCHM'、TBL'、'EXP'、'COND'、COND_PARAMS) ターゲット エンドポイントから追加のデータを取得するために使用します。 • データエンリッチメント関数を使用すると、選択したソーステーブルを、ソースまたはターゲットエンドポイントに配置さ れた他のレコードのデータで補強できます。 • データエンリッチメント関数の実用的なアプリケーションには、コード検索やマスターレコード検索(例えば、人の名前 を検索するための社会保障番号の検索)が含まれます。 ※Amazon Redshiftはサポートされていません。 • 次の表は、テーブル変換とグローバル変換の両方で使用できるソースおよびターゲットの参照関数を示しています。 これらの関数で使用できるパラメータの説明については、以下の「入力パラメータ」を参照してください。 Data Enrichment
  • 30.
    30 Functions / 関数 入力パラメータ ルックアップ関数の入力パラメータを指定できる値は、次の表で説明します。 関数説明 TTL • TTL (存続時間)は'COND'戻り値がキャッシュされる時間です。'COND'戻り値を キャッシュすると、Qlik Replicateがソース/ターゲット エンドポイントにアクセスする頻 度が減少し、パフォーマンスが向上します。デフォルトは存在しないので、TTL値を指 定する必要があります。 • <秒> - 'COND'戻り値をキャッシュする時間 (秒単位)。頻繁に更新されるデータ のキャッシュ時間 (例えば3)を指定し、ほとんど変更されないデータのキャッシュ時間を 長く指定します。 • 'NO_CACHING'- 'COND'の戻り値をキャッシュしない場合は 'NO_CACHING' を指定します。これは、常に更新されるデータ(株価など)に推奨されます。 • 'NO_EXPIRATION'- 更新されていないデータの場合は、 'NO_EXPIRATION' を指定して、Functionsの戻り値をキャッシュに永続的に格納します。 'SCHM' スキーマ名。 'TBL' ルックアップを実行するテーブル。 'EXP' • 参照テーブルからデータを取得する式。 ※ 式の構文は、アクセスするエンドポイントにネイティブである必要があります。 • 結果は単一の列になります。可能な式には、col1、col1+5、max(col1)が含まれ ます。 ※ LOB 列全体はサポートされていません。レプリケーションに制限付き LOB 列 を含める方法については、「Metadata」タブの説明を参照してください。 • 列 (変換とフィルターのみ)、ヘッダー、およびメタデータ (グローバル変換のみ) も式で 使用でき、エンドポイントに対してルックアップ ステートメントが実行される前に評価さ れます。 関数 説明 'COND' • 検索ステートメントの条件。 ※ 条件構文は、アクセスするエンドポイントにネイティブである必要があります。 CONDは、すべての必須フィールドを参照する単一のフィールドです。 • ルックアップテーブルが Oracle にある場合の例: 'Fieldname1=:1 and Fieldname2=:2 and Fieldname3 =:3’ • 参照テーブルが SQL Server に存在する場合の例 'Fieldname1=? and Fieldname2=? and Fieldname3=?’ • 列 (変換とフィルターのみ)、ヘッダー、およびメタデータ (グローバル変換のみ) も式で 使用でき、エンドポイントに対してルックアップ ステートメントが実行される前に評価さ れます。 COND_PARA MS • CONDパラメーターに必要なパラメーター。 • COND_PARAMS (条件パラメーター) は、単一のフィールドではなく、フィールドのリ ストです。 構文: $FIELDNAME1 , $FIELDNAME2 , $FIELDNAME3 例: source_lookup( 10000 , 'HR' , 'DEPARTMENTS' , 'DEPARTMENT_NAME’ , 'COMPANY_ID=? and DIVISION_ID=? and DEPT_ID=?' , $COMP_ID , $DIV_ID , $DEPT_ID ) • 効率を向上させるために、ソース/ターゲットのルックアップ テーブルに、指定したルックアップ フィールドのインデックスを作成する必要があります。
  • 31.
    31 Functions / 関数 データの情報付加の例 次の例では、HR.JOB_HISTORYテーブルにDEPARTMENT_NAME列を追加する必要があります。DEPARTMENT_NAME列はソース エンドポイントの HR.DEPARTMENTS テーブ ルにあります。 Full Loadの完了後のHR.JOB_HISTORYテーブル 列が追加される前の HR.JOB_HISTORYテーブル
  • 32.
    32 Functions / 関数 DEPARTMENT_NAME列を追加するには、次の手順を実行する必要があります。 1.新しいタスクを作成し、レプリケーションの対象としてHR.JOB_HISTORYテーブルを選択します。 2. HR. JOB_HISTORYテーブルに[New Columns]変換を適用します。 3. Expression Builderを開き、[Function] タブから[Data Enrichment] を選択します。 4. source_lookup関数を選択し、次のように構成します (ソース エンドポイントのネイティブ構文を使用)。 ルックアップテーブルが Oracle にある場合は、次の手順を実行します。 source_lookup(10000,'HR','DEPARTMENTS','DEPARTMENT_NAME','DEPARTMENT_ID=:1',$DEPARTMENT_ID) ルックアップテーブルが SQL Server に存在する場合は、次の手順を実行します。 source_lookup(10000,'HR','DEPARTMENTS','[DEPARTMENT_NAME]’, [DEPARTMENT]=?',$DEPARTMENT_ID) • 10000は TTL パラメータです。 • HRはスキーマ名です。 • 'DEPARTMENTSはテーブル名です。 • DEPARTMENT_NAMEは式です。 • DEPARTMENT_ID=:1 (またはマイクロソフト SQL Server 上の? )が条件です。 • $DEPARTMENT_IDは条件パラメータです。 5. タスクを実行します。
  • 33.
    33 Functions / 関数 関数説明 length(x) 文字列値 x の場合、length(x) 関数は、先頭の NULL 文字の前の x の前の 文字数 (バイトではない) を返します。 x が NULL の場合、長さ(x) は NULL です。x が数値の場合、length(X) は X の文字列表現の長さを返します。 like(x,y,z) like() 関数は、"Y LIKE X [ESCAPE Z]"式を実装するために使用されます。 ESCAPE (z) 句はオプションです。z 節がある場合は、like() 関数が 3 つの引数 を指定して呼び出されます。それ以外の場合は、2 つの引数を指定して呼び出され ます。 typeof(x) typeof(x) 関数は、式 xのデータ型を示す文字列を返します。 Other Functions
  • 34.
    34 Functions / 関数 Hash •Hash 関数は、入力された列のハッシュ値を生成し (SHA-256 アルゴリズムを使用して) 生成し、生成されたハッシュ値の 16 進値を返します。 • 式で関数を使用するには、hash_sha256(x)関数を[Build Expression] ウィンドウに追加し、"x" を目的のソース列名に置き換えます。 • この関数は、特に機密情報をマスキングする場合に便利です。たとえば、以下の式では、従業員の電子メール アドレスを難読化するために Hash 関数が使用されています。
  • 35.
    35 User-defined transformations /ユーザー定義変換 • Replicateの組み込み変換で提供されない機能を必要とするお客様は、独自の変換を作成し、その変換にExpression Builderからアクセスできます。 • 独立したメモリとログ記録ルーチンを作成する必要がなくなる、レプリケートのメモリ管理機能とログ記録機能を利用できるReplicate Add-ons API を使 用することを推奨します。詳細については、「Replicate add-ons API」を参照してください。 • 以下の手順は、次のサンプル ファイルに基づいています。 <INSTALL_DIR>addonssamplesMyTransformation • パスは Linux でも同じですが、スラッシュ (/) ではなく円記号 () を使用します。同様に、以下の説明は DLL ファイル (Windows) を指します が、Linux では SO ファイルにする必要があります。
  • 36.
    36 User-defined transformations /ユーザー定義変換 デフォルトのアドオン名の変更 • 既定のアドオン名 (MyTransformation) は、必要に応じ以下のファイルの名前を変更するだけで変更できます。 <INSTALL_DIR>addonssamplesMyTransformationMyTransformationMyTransformation.dll • DLL の名前を変更する場合は、以下に説明するaddons_def.json.sampleファイルを編集するときに新しい名前を指定する必要がある場 合もあります (使用するパラメーターに応じて異なります)。
  • 37.
    37 ユーザー定義変換の作成 ユーザー定義変換を作成するには、次の手順に従います。 1. 次のエクスポートされた初期化関数を実装する共有ライブラリを作成します。 typedef intAR_ADDON_INIT_FUNC(AR_ADDON_CONTEXT *context); すべての型とプロトタイプは<INSTALL_DIR>¥addons¥includeの下にあるar_addon.hとar_addon_transformation.hファイルに定義されています。 2. 共有ライブラリが次の場所に保存されていることを確認します。 <INSTALL_DIR>addonssamplesaddon_name ※高可用性セットアップ で作業する場合、作成したバイナリはすべてのクラスタ インスタンスにインストールする必要があります。
  • 38.
    38 ユーザー定義変換の作成 3. <INSTALL_DIR>¥addonsの下にあるaddons_def.json.sampleファイルにライブラリを登録します。 • nameはDLL の論理名です (任意の名前を指定できます)。lib_pathパラメータを使用して DLL パスを指定しない場合 (下記参照)、DLL ファイルは<INSTALL_DIR>¥addons¥<addon_name>に存在する必要があります。Linux では、<addon_name>フォルダは 手動で作成する必要があり、デフォルトのアドオン名 (MyTransformation) か、新しい名前 (変更した場合) にする必要があります。 • typeは、DLL を読み込むタイミングを指定するオプションのパラメーターです。現在サポートされている値はSTARTUPだけです。 • lib_pathは、DLL の完全パスです (例:C:¥Transforms¥MyManipulator.dll)。これは、DLL が <INSTALL_DIR>¥addons¥<addon_name>に存在しない場合にのみ必要です (上記のnameパラメーターの説明に記載)。 • init_functionは、DLL の生成に使用される C ファイルに表示される関数名です。 4. ファイルをaddons_def.jsonという名前で保存します。 { "addons": [{ "name": "MyTransformation", "type": "STARTUP", //"lib_path": "C:Program FilesAttunity ReplicateaddonssamplesMyTransformationMyTransformation.dll", //"lib_path": "/opt/attunity/replicate/addons/samples/MyTransformation/MyTransformation.so", "init_function": "my_transformation_init_func" }] }
  • 39.
    39 ユーザー定義変換の作成 5. 次の例のように、addon 初期化関数(ステップ 1 で説明) に新しい関数を登録します。 USER_DEFINED_TRANSFORMATION_DEF *transdef = GET_AR_AO_TRANSFORMATION_DEF(); transdef->displayName = "prefix_with(X, Y)"; transdef->functionName = "prefix_with"; transdef->description = "prefix_with adds the prefix <Y_> to a given string X"; transdef->func = trans_prefix_with; transdef->nArgs = 2; AR_AO_REGISRATION->register_user_defined_transformation(transdef); 6. Qlik Replicateサーバーサービスを再起動します。 新しい “prefix_with” 関数は、Expression Builderの[Functions->User Defined] の下で使用できるようになります。
  • 40.