次の方法で共有


.update table コマンド

適用対象: ✅Microsoft FabricAzure データ エクスプローラー

.update table コマンドは、レコードをアトミックに削除および追加することで、指定されたテーブルのデータ更新を実行します。

警告

このコマンドは回復できません。

Note

update ポリシーのソースであるテーブルで .update table コマンドを実行すると.update table コマンドによって、変更されるテーブルが更新ポリシー ソースである更新ポリシーがトリガーされます。

1 つのコマンドで最大 500 万レコードを削除できます。

アクセス許可

このコマンドを実行するには、少なくとも Table 管理者 アクセス許可が必要です。

構文

構文規則について詳しく知る。

.update[async] table TableName delete DeleteIdentifier append AppendIdentifier [with ( propertyName = propertyValue )]<|
letDeleteIdentifier=DeletePredicate;
letAppendIdentifier=AppendPredicate;

パラメーター

件名 タイプ Required 説明
async string 指定した場合、コマンドが非同期モードで実行されることを示します。
TableName string ✔️ 更新するテーブルの名前。
DeleteIdentifier string ✔️ 更新されたテーブルに適用される削除述語を指定するために使用される識別子名。
DeletePredicate string ✔️ 削除するデータとして結果が使用されるクエリのテキスト。 述語には、論理的な削除述語と同じ 制限があります
AppendIdentifier string ✔️ 更新されたテーブルに適用される追加述語を指定するために使用される識別子名。
AppendPredicate string ✔️ 追加するデータとして結果が使用されるクエリのテキスト。

重要

  • 削除述語と追加述語の両方で、リモート エンティティ、クロス db エンティティ、クロスクラスター エンティティを使用することはできません。 述語は外部テーブルを参照することも、 externaldata 演算子を使用することもできません。
  • 追加クエリと削除クエリは、決定論的な結果を生成することが期待されます。 非決定的なクエリは、予期しない結果につながる可能性があります。 クエリは、複数回実行された場合に同じデータを返す場合にのみ決定論的です。
  • クエリは、 update 実行内で複数回実行される場合があります。 中間クエリの結果に一貫性がない場合は、update コマンドによって予期しない結果が生成される可能性があります。

サポートされるプロパティ

名前 種類 説明
whatif [bool] true場合は、レコードを追加/削除せずに、すべてのシャードで追加/削除されるレコードの数を返します。 既定値は、false です。
分散 [bool] true場合、コマンドはクエリを並列で実行しているすべてのノードから取り込みます。 既定値は false です。 パフォーマンス ヒントを参照してください

重要

データを削除または追加する前に述語を検証するために、更新を実行する前に、最初に whatif モードで実行することをお勧めします。

返品

コマンドの結果は、各レコードが新しいデータで作成されたか、レコードが削除された 拡張 を表すテーブルです。

名前 種類 説明
テーブル string エクステントが作成または削除されたテーブル。
アクション string エクステントに対して実行されるアクションに応じて または 削除 を作成します。
ExtentId guid コマンドによって作成または削除されたエクステントの一意識別子。
RowCount long コマンドによって指定されたエクステント内で作成または削除された行の数。

.update tableビューと具体化されたビューを選択する

.update table コマンドまたは具体化されたビューのいずれかを使用してテーブル内で同じ目標を達成できるシナリオがあります。 たとえば、マテリアライズド ビューを使用して各レコードの最新バージョンを保持したり、新しいバージョンが使用可能になったときに更新を使用してレコードを更新したりできます。

使用する方法を決定するには、次のガイドラインに従います。

  • マテリアライズド ビューで更新パターンがサポートされていない場合は、update コマンドを使用します。
  • ソース テーブルに取り込み量が多く、更新プログラムが少ない場合は、update コマンドを使用するとパフォーマンスが高くなり、具体化されたビューよりもキャッシュまたはストレージの消費量が少なくなる可能性があります。 これは、具体化されたビューで取り込まれたすべてのデータを再処理する必要があるためです。これは、追加述語または削除述語に基づいて更新する個々のレコードを識別するよりも効率的ではありません。
  • 具体化されたビューは、フル マネージド ソリューションです。 具体化されたビューは 1 回定義され マテリアライズはシステムによってバックグラウンドで行われます。 更新コマンドには、更新が行われるたびに明示的に更新コマンドを実行する調整されたプロセス ( Azure Data FactoryLogic AppsPower Automate など) が必要です。 具体化されたビューがユース ケースに十分に機能する場合、具体化されたビューを使用すると、管理とメンテナンスが少なくなります。

パフォーマンスに関するヒント

  • データの取り込みはリソースを大量に消費する操作であり、クエリの実行など、クラスターでの同時実行アクティビティに影響する可能性があります。 多くの .update コマンドを一度に実行し、 分散 プロパティを集中的に使用するという、リソースを集中的に消費するアクションは避けてください。
  • 操作ごとに追加データを 1 GB 未満に制限します。 必要に応じて、複数の更新コマンドを使用します。
  • クエリによって生成されるデータの量が多く、1 GB を超え、シリアル化を必要としない場合にのみ、 distributed フラグを true に設定します。複数のノードが並列で出力を生成できます。 クエリ結果が小さい場合は、このフラグを使用しないでください。これは、多数の小さなデータ シャードを不必要に生成する可能性があるためです。

この例では、次の表を使用します。

.set-or-replace Employees <|
  range i from 1 to 100 step 1
  | project Id=i
  | extend Code = tostring(dynamic(["Customer", "Employee"])[Id %2])
  | extend Color = tostring(dynamic(["Red", "Blue", "Gray"])[Id %3])

次のコマンドを実行すると、100 個のレコードを含むテーブルが作成されます。

ID コード
1 社員
2 カスタマー グレー
3 社員 [赤]
4 カスタマー
5 社員 グレー
6 カスタマー
6 社員

1 行の 1 つの列を更新する

次の例では、1 つの行の 1 つの列を更新します。

.update table Employees delete D append A with(whatif=true) <|
    let D = Employees
      | where Id==3;
    let A = Employees
      | where Id==3
      | extend Color="Orange";

whatifが true に設定されていることに注意してください。 このクエリの後、テーブルは変更されませんが、コマンドは、1 つの行が削除されたエクステントと 1 行の新しいエクステントがあることを返します。

次のコマンドは、実際に更新を実行します。

.update table Employees delete D append A <|
    let D = Employees
      | where Id==3;
    let A = Employees
      | where Id==3
      | extend Color="Orange";

複数の行の 1 つの列を更新する

次の例では、1 つの列Colorの値がgreenblueの行の値に更新されます。

.update table Employees delete D append A <|
    let D = Employees
        | where Code=="Employee"
        | where Color=="Blue";
    let A = D
      | extend Color="Green";

ここでは、追加述語の定義で 削除識別子 を再利用しました。

複数の行で複数の列を更新する

次の例では、すべての行の複数の列を灰色で更新します。

.update table Employees delete D append A <|
    let D = Employees
      | where Color=="Gray";
    let A = D
      | extend Code=strcat("ex-", Code)
      | extend Color="";

別のテーブルを使用して行を更新する (参照値)

この例では、最初の手順として次のマッピング テーブルを作成します。

.set-or-replace ColorMapping <|
  datatable(OldColor:string, NewColor:string)[
    "Red", "Pink",
    "Blue", "Purple",
    "Gray", "LightGray",
    "Orange", "Yellow",
    "Green", "AppleGreen"
  ]

このマッピング テーブルは、元のテーブルの一部の色を更新するために使用されます。

.update table Employees delete D append A <|
  let D = Employees
    | where Code=="Customer";
  let A = D
    | lookup ColorMapping on $left.Color==$right.OldColor
    | project Id, Code, Color=NewColor

データテーブルを使用して行を更新する

更新する値がテーブルに格納されずにわかっている場合があり、 datatable 演算子 が役立つことがあります。

.update table Employees delete D append A <|
  let A = datatable(Id:long, Code:string, Color:string)[
    1, "Customer", "Purple",
    2, "Customer", "Magenta",
    3, "Customer", "Turquoise",
  ];
  let D = Employees
      | join kind=leftsemi A on Id
      | where true;

ステージング テーブルを使用して行を更新する

一般的なパターンは、メイン テーブルを更新する前に、まずステージング テーブルにデータを格納することです。

最初のコマンドでは、ステージング テーブルが作成されます。

.set-or-replace MyStagingTable <|
    range i from 70 to 130 step 5
    | project Id=i
    | extend Code = tostring(dynamic(["Customer", "Employee"])[Id %2])
    | extend Color = tostring(dynamic(["Red", "Blue", "Gray"])[Id %3])

次のコマンドは、メイン テーブルをステージング テーブル内のデータで更新します。

.update table Employees delete D append A <|
    let A = MyStagingTable;
    let D = Employees
        | join kind=leftsemi MyStagingTable on Id
        | where true;

ステージング テーブル内の一部のレコードはメイン テーブルに存在しませんでした (つまり、 Id>100がありました)、メイン テーブルにまだ挿入されていました (アップサート動作)。

複合キー

最初のコマンドは、複合キーを含むテーブルを作成します。

.set-or-replace VersionedArticle <|
  datatable(ArticleId:string, Version:int, Detail:string)[
    "A", 1, "Early version",
    "B", 1, "News about mobiles",
    "C", 1, "Opinion article",
    "B", 2, "Revision about brand X",
    "B", 3, "Revision about brand Y",
    "C", 2, "Fact check"
  ]

次のコマンドは、展開された構文を使用して特定のレコードを更新します。

.update table VersionedArticle delete D append A <|
  let D = VersionedArticle
    | where ArticleId=="B"
    | where Version==3;
  let A = VersionedArticle
    | where ArticleId=="B"
    | where Version==3
    | extend Detail = "Revision about brand Z";