# Snowflake - Replicate rows (行の複製) アクション

このアクションは、Snowflake インスタンス内の選択されたテーブルを更新します。リストデータピルを入力として受け取り、それらを行として挿入または更新します。

Workato はまず、入力データと Snowflake テーブルのスキーマを検出して比較します。それらが一致しない場合、このアクションは Snowflake テーブル内に新しい列を作成します。これにより、入力スキーマに更新があった場合でも、入力のすべてのデータが Snowflake に自動的に同期されるようになります。

  • スキーマの検出は、バッチ入力データの各項目の値を検査し、それを適切な列のタイプにマッピングすることで実行されます。複数のタイプが見つかった場合、精度の損失を防ぐために最も広範な列のタイプが推測されます。作成される列のタイプを指定したい場合は、Replicate Schema アクションの使用を検討してください。

  • 指定した宛先のテーブルが存在しない場合は作成されます。

  • このアクションでは、ソースデータに特定の列のデータが含まれなくなった場合でも、宛先のテーブル内の既存の列が削除されることはありません。

  • このアクションは既存の列のデータ型を変更しません。

行の制限

Snowflake には、挿入/更新ステートメントについて16,384行の制限があります。16,384行を超える行を含む入力リストがある場合、このジョブは失敗します。

Replicate アクション Replicate rows アクション

# 入力

入力 タイプ 説明
Table name 必須 行を挿入するテーブルを選択するか、完全なテーブル名を入力します。スキーマの接頭辞は必要ありません。テーブル名では大文字と小文字が区別されます。テーブル名には大文字を使用することをお勧めします。理由についてはこちらをご覧ください。
Unique keys 必須 行を一意として識別する列を指定します。宛先に行が存在する場合、その行は更新されます。そうでない場合は、新規行として挿入されます。
Rows 必須 リストデータピルを入力として使用します。
Flatten columns 任意 入力データがオブジェクトとして書式設定されている場合、このトグルを使用してオブジェクトを個々のキーと値のペアに平坦化します。下の例を参照してください。
Column case 任意 複製時に列名の大文字と小文字を維持するかどうかを決定します。デフォルトのオプション (Upcase) を使用することをお勧めします。これにより、大文字と小文字を区別しない SQL クエリーが有効になります。理由についてはこちらをご覧ください。
Exclude columns 任意 複製から除外する列を指定します。すべての列を複製するには、空白のままにしてください。

# テーブル名のベストプラクティス

テーブル名をテキストで入力する場合、テーブル名では大文字と小文字が区別され、大文字のテーブル名の使用が推奨されることに留意してください。

テーブル名を二重引用符で囲むと大文字と小文字が区別されます (二重引用符で囲まれた識別子 (opens new window)に関する説明を参照)。これにより、必要に応じてテーブル名で特殊文字を柔軟に使用できます。

クエリーを簡単にするため、テーブル名には大文字を使用することをお勧めします。そうすることで、Snowflake ユーザーは大文字と小文字を区別しない引用符なしの識別子を使用してクエリーを作成できるようになります。これは、Snowflake では識別子を大文字で格納および解決する (opens new window)ためです。

テーブル名 Snowflake での SQL クエリー
MyTable select * from MyTable; // will not work
select * from "MyTable"; // OK
MYTABLE select * from MyTable; // OK
select * from "MYTABLE"; // OK

# 平坦化を使用するタイミング

データをオブジェクトとして書式設定している場合、ネストされたデータに直接アクセスできない場合があります (JSON オブジェクト内にネストされたデータなど)。

オブジェクトを平坦化し、個々のキーと値のペアを一意の列として扱うには、[Flatten columns] のトグルを使用します。

デフォルトでは、このアクションは、ネストされたデータの1つのレベルのみを平坦化します。平坦化するレベルの数は最大50まで設定できます。

データソースの例を以下に示します。

{
  "id": 1,
  "name": "John Doe",
  "handles": {
    "github": "johndoe",
    "slack": "john"
  }
}

平坦化されていない行は以下のようになります。

ID NAME HANDLES
1 John Doe {"github": "johndoe", "slack": "john"}

平坦化された行は以下のようになります。

ID NAME HANDLES_GITHUB HANDLES_SLACK
1 John Doe johndoe john

# [Column case] (列の大文字と小文字) のオプション

列名は大文字にすることをお勧めします。そうすることで、Snowflake ユーザーが列の大文字と小文字を気にせずにクエリーを作成できるようになり、データのクエリー実行時のエクスペリエンスが向上します。これは、Snowflake では識別子を大文字で格納および解決する (opens new window)ためです。

このアクションは、二重引用符で囲まれた識別子 (opens new window)で列を作成するため、非標準の文字 (特殊文字、空白文字、ASCII など) を含む項目名が忠実に複製されます。

# Preserve original

[Preserve original] に設定すると、SQL クエリーでは正確な大文字と小文字を使用して列を参照する必要があります (以下の例を参照)。

#

# Given that source data has a key "AccountId"

# When Column_Case is "Upcase" or blank
SELECT AccountId FROM mytable;   // OK
SELECT accountid FROM mytable;   // OK
SELECT "ACCOUNTID" FROM mytable; // OK

# When Column_Case is "Preserve original"
SELECT AccountId FROM mytable;   // will fail
SELECT accountid FROM mytable;   // will fail
SELECT "AccountId" FROM mytable; // OK

# 出力

このアクションの出力は、アップサートされた行の数です。

# Workato スキーママッパー

各データソース (API、データベース、ファイル) には独自のスキーマがあります。一貫性を保つために、このアクションはソースの各データ型を Snowflake テーブルスキーマにマップします。このマッピングは、Snowflake テーブルを作成/更新する前に行われます。

入力データは以下で定義されるマッピングに基づいて Snowflake データ型に変換されます。

Workato のデータ型 Snowflake のデータ型
string varchar (opens new window)
デフォルトで最大長に設定されます。
string(binary) binary (opens new window)
date date (opens new window)
date_time timestamp timestamp (opens new window)
Workato では、コネクションの設定で定義されたタイムゾーンを使用するか、デフォルトの Snowflake ユーザーアカウントのタイムゾーンを使用します。
integer number (opens new window)
精度と桁数はデフォルトで (38, 0) に設定されます。
number double (opens new window)
boolean boolean (opens new window)
object variant (opens new window)


Last updated: 2023/8/31 1:07:14