diff --git a/Allfiles/Labs/00-Setup/DatabaseBackup/AdventureWorksDW2022-DP500.bacpac b/Allfiles/Labs/00-Setup/DatabaseBackup/AdventureWorksDW2022-DP500.bacpac new file mode 100644 index 0000000..8439cd1 Binary files /dev/null and b/Allfiles/Labs/00-Setup/DatabaseBackup/AdventureWorksDW2022-DP500.bacpac differ diff --git a/Allfiles/Labs/00-Setup/DatabaseBackup/AdventureWorksDW2022-DP500.bak b/Allfiles/Labs/00-Setup/DatabaseBackup/AdventureWorksDW2022-DP500.bak new file mode 100644 index 0000000..18c991c Binary files /dev/null and b/Allfiles/Labs/00-Setup/DatabaseBackup/AdventureWorksDW2022-DP500.bak differ diff --git a/Allfiles/Labs/00-Setup/VM-Setup.txt b/Allfiles/Labs/00-Setup/VM-Setup.txt new file mode 100644 index 0000000..ebb248d --- /dev/null +++ b/Allfiles/Labs/00-Setup/VM-Setup.txt @@ -0,0 +1,11 @@ +## Machine requirements + +In order to complete certain labs, you need access to a SQL Server instance to restore the sample database. + +- Use SQL Server Management Studio (SSMS) to connect to "localhost" + +Restore AdventureWorksDW2022.bak database to SQL Server localhost. + +Install the most recent version of Power BI Desktop application. + + diff --git a/Allfiles/Labs/01/Assets/01-Snippets.txt b/Allfiles/Labs/01/Assets/01-Snippets.txt new file mode 100644 index 0000000..ac720aa --- /dev/null +++ b/Allfiles/Labs/01/Assets/01-Snippets.txt @@ -0,0 +1,6 @@ +>> Use SQL to query tables +================================================== +SELECT Item, SUM(Quantity * UnitPrice) AS Revenue +FROM sales +GROUP BY Item +ORDER BY Revenue DESC; diff --git a/Instructions/Labs/01-lakehouse.md b/Instructions/Labs/01-lakehouse.md index e3867cf..4f5b82c 100644 --- a/Instructions/Labs/01-lakehouse.md +++ b/Instructions/Labs/01-lakehouse.md @@ -43,7 +43,7 @@ Fabric でデータを操作する前に、Fabric 試用版を有効にしてワ ## ファイルをアップロードする -Fabric には、Power Query に基づいてビジュアル ツールを使用して定義できるデータの外部ソースとデータ フロー (Gen 2) をコピーするパイプラインの組み込みサポートなど、レイクハウスにデータを読み込むための複数の方法が用意されています。 しかし、少量のデータを取り込む最も簡単な方法の 1 つは、ローカル コンピューター (または該当する場合はラボ VM) からファイルまたはフォルダーをアップロードすることです。 +Fabric には、Power Query に基づいてビジュアル ツールを使用して定義できるデータを外部ソースとデータ フロー (Gen 2) からコピーするパイプラインの組み込みサポートなど、レイクハウスにデータを読み込むための複数の方法が用意されています。 しかし、少量のデータを取り込む最も簡単な方法の 1 つは、ローカル コンピューター (または該当する場合はラボ VM) からファイルまたはフォルダーをアップロードすることです。 1. `https://raw.githubusercontent.com/MicrosoftLearning/dp-data/main/sales.csv` から [sales.csv](https://raw.githubusercontent.com/MicrosoftLearning/dp-data/main/sales.csv) ファイルをダウンロードし、ローカル コンピューター (または該当する場合はラボ VM) に **sales.csv** として保存します。 @@ -98,6 +98,7 @@ Fabric には、Power Query に基づいてビジュアル ツールを使用し GROUP BY Item ORDER BY Revenue DESC; ``` +> **注**:ラボ VM を使っていて SQL クエリの入力に問題がある場合は、`https://github.com/MicrosoftLearning/mslearn-fabric/raw/main/Allfiles/Labs/01/Assets/01-Snippets.txt` から [01-Snippets.txt](https://github.com/MicrosoftLearning/mslearn-fabric/raw/main/Allfiles/Labs/01/Assets/01-Snippets.txt) ファイルをダウンロードして VM に保存できます。 その後、テキスト ファイルからクエリをコピーできます。 3. **[▷] (実行)** ボタンを使用してクエリを実行し、結果を表示します。これには、各製品の総収益が表示されるはずです。 @@ -134,9 +135,11 @@ Fabric には、Power Query に基づいてビジュアル ツールを使用し 1. [SQL エンドポイント] ページの下部にある **[モデル]** タブを選びます。セマンティック モデルのデータ モデル スキーマが表示されます。 - ![セマンティック モデルのスクリーンショット。](./Images/data-model.png) + ![スクリーンショット 2024-04-29 155248](https://github.com/afelix-95/mslearn-fabric/assets/148110824/ba9bd67d-8968-4c46-ac7a-f96a9f697f4c) - > **注**:この演習では、セマンティック モデルは 1 つのテーブルで構成されます。 実際のシナリオでは、レイクハウスに複数のテーブルを作成し、それぞれがモデルに含まれる可能性があります。 その後、モデル内のこれらのテーブル間のリレーションシップを定義できます。 + > **注 1**: この演習では、セマンティック モデルは 1 つのテーブルで構成されます。 実際のシナリオでは、レイクハウスに複数のテーブルを作成し、それぞれがモデルに含まれる可能性があります。 その後、モデル内のこれらのテーブル間のリレーションシップを定義できます。 + + > **注 2**:ビュー `frequently_run_queries`、`long_running_queries`、`exec_sessions_history`、`exec_requests_history` は、ファブリックによって自動的に作成される `queryinsights` スキーマの一部です。 これは、SQL 分析エンドポイントでの履歴クエリ アクティビティの総合的なビューを提供する機能です。 この機能はこの演習の範囲外であるため、現時点ではこれらのビューは無視してください。 2. メニュー リボンで、 **[レポート]** タブを選択します。次に、 **[新しいレポート]** を選択します。 レポートをデザインできる新しいブラウザー タブが開きます。 @@ -169,4 +172,4 @@ Fabric には、Power Query に基づいてビジュアル ツールを使用し 1. 左側のバーで、ワークスペースのアイコンを選択して、それに含まれるすべての項目を表示します。 2. ツール バーの **[...]** メニューで、 **[ワークスペースの設定]** を選択してください。 -3. **[その他]** セクションで、 **[このワークスペースの削除]** を選択してください。 +3. **[全般]** セクションで、**[このワークスペースの削除]** を選択します。 diff --git a/Instructions/Labs/02-analyze-spark.md b/Instructions/Labs/02-analyze-spark.md index 4e059c6..c0d45fe 100644 --- a/Instructions/Labs/02-analyze-spark.md +++ b/Instructions/Labs/02-analyze-spark.md @@ -270,11 +270,11 @@ Apache Spark でデータを操作するには、"ノートブック" を作成 > **注**: 一般に、*Parquet* 形式は、分析ストアへの追加の分析またはインジェストに使用するデータ ファイルに適しています。 Parquet は、ほとんどの大規模な Data Analytics システムでサポートされている非常に効率的な形式です。 実際、データ変換の要件が、単に別の形式 (CSV など) から Parquet にデータを変換することだけである場合があります。 -2. セルを実行し、データが保存されたことを示すメッセージを待ちます。 次に、左側の **[レイクハウス]** ペインの **[ファイル]** ノードの **[...]** メニューで **[更新]** を選び、**transformed_orders** フォルダーを選んで、**orders** という名前の新しいフォルダーが含まれることを確認します。これには、1 つ以上の Parquet ファイルが含まれています。 +2. セルを実行し、データが保存されたことを示すメッセージを待ちます。 次に、左側の **[レイクハウス]** ペインの **[ファイル]** ノードの **[...]** メニューで **[更新]** を選び、**transformed_data** フォルダーを選んで、**orders** という名前の新しいフォルダーが含まれることを確認します。これには、1 つ以上の Parquet ファイルが含まれています。 ![Parquet ファイルを含むフォルダーのスクリーンショット。](./Images/saved-parquet.png) -3. 次のコードを含む新しいセルを追加して、**transformed_orders/orders** フォルダー内の Parquet ファイルから新しいデータフレームを読み込みます。 +3. 次のコードを含む新しいセルを追加して、**transformed_data/orders** フォルダー内の Parquet ファイルから新しいデータフレームを読み込みます。 ```Python orders_df = spark.read.format("parquet").load("Files/transformed_data/orders") @@ -358,7 +358,7 @@ PySpark コードが含まれているセルに SQL ステートメントを埋 GROUP BY YEAR(OrderDate) ORDER BY OrderYear; ``` - + 2. このセルを実行し、結果を確認します。 次の点に注意してください。 - セルの先頭にある `%%sql` 行 (*magic* と呼ばれます) は、このセル内でこのコードを実行するには、PySpark ではなく、Spark SQL 言語ランタイムを使用する必要があることを示しています。 - この SQL コードは、前に作成した **salesorder** テーブルを参照します。 @@ -587,4 +587,4 @@ PySpark コードが含まれているセルに SQL ステートメントを埋 1. 左側のバーで、ワークスペースのアイコンを選択して、それに含まれるすべての項目を表示します。 2. ツール バーの **[...]** メニューで、 **[ワークスペースの設定]** を選択してください。 -3. **[その他]** セクションで、 **[このワークスペースの削除]** を選択してください。 +3. **[全般]** セクションで、**[このワークスペースの削除]** を選択します。 diff --git a/Instructions/Labs/03-delta-lake.md b/Instructions/Labs/03-delta-lake.md index aeb66dc..a118b46 100644 --- a/Instructions/Labs/03-delta-lake.md +++ b/Instructions/Labs/03-delta-lake.md @@ -324,4 +324,4 @@ Delta Lake では、"ストリーミング" データがサポートされてい 1. 左側のバーで、ワークスペースのアイコンを選択して、それに含まれるすべての項目を表示します。 2. ツール バーの **[...]** メニューで、 **[ワークスペースの設定]** を選択してください。 -3. **[その他]** セクションで、 **[このワークスペースの削除]** を選択してください。 +3. **[全般]** セクションで、**[このワークスペースの削除]** を選択します。 diff --git a/Instructions/Labs/03b-medallion-lakehouse.md b/Instructions/Labs/03b-medallion-lakehouse.md index 8a402c3..a3d14d4 100644 --- a/Instructions/Labs/03b-medallion-lakehouse.md +++ b/Instructions/Labs/03b-medallion-lakehouse.md @@ -612,4 +612,4 @@ Fabric でデータを操作する前に、Fabric 試用版を有効にしてワ 1. 左側のバーで、ワークスペースのアイコンを選択して、それに含まれるすべての項目を表示します。 2. ツール バーの **[...]** メニューで、 **[ワークスペースの設定]** を選択してください。 -3. **[その他]** セクションで、 **[このワークスペースの削除]** を選択してください。 +3. **[全般]** セクションで、**[このワークスペースの削除]** を選択します。 diff --git a/Instructions/Labs/04-ingest-pipeline.md b/Instructions/Labs/04-ingest-pipeline.md index b030eba..da034ab 100644 --- a/Instructions/Labs/04-ingest-pipeline.md +++ b/Instructions/Labs/04-ingest-pipeline.md @@ -39,7 +39,7 @@ Fabric でデータを操作する前に、Fabric 試用版を有効にしてワ データを簡単に取り込むには、パイプラインで**データのコピー** アクティビティを使用して、データをソースから抽出し、レイクハウス内のファイルにコピーします。 -1. レイクハウスの **[ホーム]** ページで **[新しいデータ パイプライン]** を選択し、**Ingest Sales Data** という名前の新しいデータ パイプラインを作成します。 +1. ご自分のレイクハウスの **[ホーム]** ページで、**[データの取得]**、**[新しいデータ パイプライン]** の順に選択し、**Ingest Sales Data** という名前の新しいデータ パイプラインを作成します。 2. **データのコピー** ウィザードが自動的に開かない場合は、パイプライン エディター ページで **[データのコピー]** を選択します。 3. **データのコピー** ウィザードの **[データ ソースの選択]** ページにある **[データ ソース]** セクションで、 **[汎用プロトコル]** タブを選択し、 **[HTTP]** を選択します。 @@ -49,8 +49,9 @@ Fabric でデータを操作する前に、Fabric 試用版を有効にしてワ - **URL**: `https://raw.githubusercontent.com/MicrosoftLearning/dp-data/main/sales.csv` - **接続**: 新しい接続の作成 - **接続名**: "一意の名前を指定します"** - - **認証の種類**: Basic ("ユーザー名とパスワードは空白のままにしておきます")** -5. **[次へ]** を選択します。 次に、次の設定が選択されていることを確認します。 + - **データ ゲートウェイ**: (なし) + - **認証の種類**: 匿名 +5. [**次へ**] を選択します。 次に、次の設定が選択されていることを確認します。 - **相対 URL**: *空白のまま* - **要求メソッド**:GET - **追加ヘッダー** :*空白のまま* @@ -64,7 +65,7 @@ Fabric でデータを操作する前に、Fabric 試用版を有効にしてワ - **最初の行をヘッダーとして使用**: 選択 - **圧縮の種類**: なし 7. **[データのプレビュー]** を選択すると、取り込まれたデータのサンプルが表示されます。 次に、データ プレビューを閉じて、 **[次へ]** を選択します。 -8. **[データのコピー先の選択]** ページで、既存のレイクハウスを選択します。 **[次へ]** を選択します。 +8. **[データ変換先に接続]** ページで、既存のレイクハウスを選択します。 **[次へ]** を選択します。 9. データのコピー先オプションを次のように設定し、 **[次へ]** を選択します。 - **ルート フォルダー**: Files - **フォルダーのパス名**: new_data @@ -148,8 +149,7 @@ Fabric でデータを操作する前に、Fabric 試用版を有効にしてワ - **全般**: - **名前**: Delete old files - **ソース** - - **データ ストアの種類**: ワークスペース - - **ワークスペース データ ストア**: "お使いのレイクハウス"** + - **[接続]**:"自分のレイクハウス"** - **ファイル パスの種類**: ワイルドカード ファイル パス - **フォルダー パス**: Files / **new_data** - **ワイルドカード ファイル名**: *.csv @@ -181,6 +181,8 @@ Fabric でデータを操作する前に、Fabric 試用版を有効にしてワ ![データフロー アクティビティを含むパイプラインのスクリーンショット。](./Images/pipeline-run.png) +> 注: エラー メッセージ "Spark SQL クエリはレイクハウスのコンテキストでのみ使用できます。** 次の手順に進むには、レイクハウスをアタッチしてください" を受け取る場合:ノートブックを開き、左ペインで作成したレイクハウスを選び、**[すべてのレイクハウスの削除]** を選び、再度追加します。 パイプライン デザイナーに戻り、**[▷ 実行]** を選びます。 + 8. ポータルの左端にあるハブ メニュー バーで、お使いのレイクハウスを選択します。 9. **エクスプローラー** ペインで、**Tables** を展開し、**new_sales** テーブルを選択して、それに含まれるデータのプレビューを表示します。 このテーブルは、パイプラインによって実行されたときにノートブックによって作成されました。 @@ -194,4 +196,4 @@ Fabric でデータを操作する前に、Fabric 試用版を有効にしてワ 1. 左側のバーで、ワークスペースのアイコンを選択して、それに含まれるすべての項目を表示します。 2. ツール バーの **[...]** メニューで、 **[ワークスペースの設定]** を選択してください。 -3. **[その他]** セクションで、 **[このワークスペースの削除]** を選択してください。 +3. **[全般]** セクションで、**[このワークスペースの削除]** を選択します。 diff --git a/Instructions/Labs/05-dataflows-gen2.md b/Instructions/Labs/05-dataflows-gen2.md index 85faa81..be68f91 100644 --- a/Instructions/Labs/05-dataflows-gen2.md +++ b/Instructions/Labs/05-dataflows-gen2.md @@ -93,7 +93,7 @@ Fabric でデータを操作する前に、Fabric 試用版を有効にしてワ 6. **[発行]** を選択してデータフローを発行します。 次に、ワークスペースにデータフロー **Dataflow 1** が作成されるまで待ちます。 -7. 発行されたら、ワークスペース内のデータフローを右クリックし、 **[プロパティ]** を選択して、データフローの名前を変更できます。 +7. 発行されたら、ワークスペース内のデータフローの隣にある省略記号 **(...)** をクリックし、**[プロパティ]** を選択して、データフローの名前を変更できます。 ## パイプラインにデータフローを追加する @@ -136,5 +136,4 @@ Microsoft Fabric でのデータフローの調査が完了したら、この演 1. ブラウザーで Microsoft Fabric に移動します。 1. 左側のバーで、ワークスペースのアイコンを選択して、それに含まれるすべての項目を表示します。 1. ツール バーの **[...]** メニューで、 **[ワークスペースの設定]** を選択してください。 -1. **[その他]** セクションで、 **[このワークスペースの削除]** を選択します。 -1. 変更を Power BI Desktop に保存しないでください。既に保存されている場合は、.pbix ファイルを削除してください。 +1. **[全般]** セクションで、**[このワークスペースの削除]** を選択します。 diff --git a/Instructions/Labs/06-data-warehouse.md b/Instructions/Labs/06-data-warehouse.md index fa4cd96..080d2f3 100644 --- a/Instructions/Labs/06-data-warehouse.md +++ b/Instructions/Labs/06-data-warehouse.md @@ -243,4 +243,4 @@ SQL コードを記述する代わりに、グラフィカル クエリ デザ 1. 左側のバーで、ワークスペースのアイコンを選択して、それに含まれるすべての項目を表示してください。 2. ツール バーの **[...]** メニューで、 **[ワークスペースの設定]** を選択してください。 -3. **[その他]** セクションで、 **[このワークスペースの削除]** を選択してください。 +3. **[全般]** セクションで、**[このワークスペースの削除]** を選択します。 diff --git a/Instructions/Labs/06a-data-warehouse-load.md b/Instructions/Labs/06a-data-warehouse-load.md index 2a06484..0959e42 100644 --- a/Instructions/Labs/06a-data-warehouse-load.md +++ b/Instructions/Labs/06a-data-warehouse-load.md @@ -29,7 +29,7 @@ Fabric でデータを操作する前に、Fabric 試用版を有効にしてワ 1. **Synapse Data Engineering** のホーム ページで、任意の名前を指定して新しい**レイクハウス**を作成します。 - 1 分ほどすると、新しい空のレイクハウスが作成されます。 分析のために、データ レイクハウスにいくつかのデータを取り込む必要があります。 これを行うには複数の方法がありますが、この演習では、CVS ファイルをローカル コンピューター (または、該当する場合はラボ VM) にダウンロードし、レイクハウスにアップロードします。 + 1 分ほどすると、新しい空のレイクハウスが作成されます。 分析のために、データ レイクハウスにいくつかのデータを取り込む必要があります。 これを行うには複数の方法がありますが、この演習では、CSV ファイルをローカル コンピューター (または、該当する場合はラボ VM) にダウンロードし、レイクハウスにアップロードします。 1. この演習用のファイルを `https://github.com/MicrosoftLearning/dp-data/raw/main/sales.csv` からダウンロードします。 @@ -249,4 +249,4 @@ Sales データのファクト テーブルとディメンションを作成し 1. 左側のバーで、ワークスペースのアイコンを選択して、それに含まれるすべての項目を表示してください。 2. ツール バーの **[...]** メニューで、 **[ワークスペースの設定]** を選択してください。 -3. **[その他]** セクションで、 **[このワークスペースの削除]** を選択してください。 +3. **[全般]** セクションで、**[このワークスペースの削除]** を選択します。 diff --git a/Instructions/Labs/06b-data-warehouse-query.md b/Instructions/Labs/06b-data-warehouse-query.md index 1ef2ba0..d2b9ba9 100644 --- a/Instructions/Labs/06b-data-warehouse-query.md +++ b/Instructions/Labs/06b-data-warehouse-query.md @@ -184,4 +184,4 @@ SQL クエリ エディターでは、IntelliSense、コード補完、構文の 1. 左側のバーで、ワークスペースのアイコンを選択して、それに含まれるすべての項目を表示してください。 2. ツール バーの **[...]** メニューで、 **[ワークスペースの設定]** を選択してください。 -3. **[その他]** セクションで、 **[このワークスペースの削除]** を選択してください。 +3. **[全般]** セクションで、**[このワークスペースの削除]** を選択します。 diff --git a/Instructions/Labs/06c-monitor-data-warehouse.md b/Instructions/Labs/06c-monitor-data-warehouse.md index d162ea1..04813ac 100644 --- a/Instructions/Labs/06c-monitor-data-warehouse.md +++ b/Instructions/Labs/06c-monitor-data-warehouse.md @@ -130,4 +130,4 @@ Microsoft Fabric データ ウェアハウスは、"クエリの分析情報" 1. 左側のバーで、ワークスペースのアイコンを選択して、それに含まれるすべての項目を表示してください。 2. ツール バーの **[...]** メニューで、 **[ワークスペースの設定]** を選択してください。 -3. **[その他]** セクションで、 **[このワークスペースの削除]** を選択してください。 +3. **[全般]** セクションで、**[このワークスペースの削除]** を選択します。 diff --git a/Instructions/Labs/06d-secure-data-warehouse.md b/Instructions/Labs/06d-secure-data-warehouse.md new file mode 100644 index 0000000..666b58e --- /dev/null +++ b/Instructions/Labs/06d-secure-data-warehouse.md @@ -0,0 +1,269 @@ +--- +lab: + title: Microsoft Fabric データ ウェアハウスをセキュリティで保護する + module: Secure a Microsoft Fabric data warehouse +--- + +# データ ウェアハウス内のデータをセキュリティで保護する + +Microsoft Fabric のアクセス許可と詳細な SQL アクセス許可を組み合わせて使用し、ウェアハウスのアクセスとユーザーのアクセス許可を管理します。 この演習では、詳細なアクセス許可、列レベル セキュリティ、行レベル セキュリティ、動的データ マスクを使用してデータをセキュリティで保護します。 + +> **注**:このラボの演習を完了するには、2 人のユーザーが必要です。1 人のユーザーにワークスペース管理者ロールを割り当て、もう 1 人にワークスペース ビューアー ロールを割り当てる必要があります。 ワークスペースにロールを割り当てるには、「[ワークスペースへのアクセスを許可する]( +https://learn.microsoft.com/fabric/get-started/give-access-workspaces +)」を参照してください。 + +このラボの所要時間は約 **45** 分です。 + +## ワークスペースの作成 + +Fabric でデータを操作する前に、Fabric 試用版を有効にしてワークスペースを作成してください。 + +1. [Microsoft Fabric ホーム ページ](https://app.fabric.microsoft.com)で、**Synapse Data Warehouse** を選択します。 +1. 左側のメニュー バーで、 **[ワークスペース]** を選択します (アイコンは 🗇 に似ています)。 +1. 任意の名前で新しいワークスペースを作成し、Fabric 容量を含むライセンス モード ("試用版"、*Premium*、または *Fabric*) を選択します。** +1. 開いた新しいワークスペースは空のはずです。 + + ![Fabric の空のワークスペースを示すスクリーンショット。](./Images/new-empty-workspace.png) + +> **注**:ワークスペースを作成すると、自分は自動的にワークスペース管理者ロールのメンバーになります。 2 番目のユーザーはご利用の環境からワークスペース ビューアー ロールに追加し、これらの演習で構成された機能をテストできます。 これを行うには、ワークスペース内で **[アクセスの管理]** を選択し、**[ユーザーまたはグループの追加]** を選択します。 これにより、2 番目のユーザーにワークスペースのコンテンツの表示が許可されます。 + +## データ ウェアハウスの作成 + +次に、作成したワークスペースにデータ ウェアハウスを作成します。 Synapse Data Warehouse のホーム ページには、新しいウェアハウスを作成するためのショートカットがあります。 + +1. **Synapse Data Warehouse** ホーム ページで、新しい**ウェアハウス**を任意の名前を付けて作成します。 + + 1 分ほどで、新しいレイクハウスが作成されます。 + + ![新しいウェアハウスのスクリーンショット。](./Images/new-empty-data-warehouse.png) + +## テーブル内の列に動的データ マスク ルールを適用する + +動的データ マスク ルールは、テーブル レベルの個々の列に適用されるため、すべてのクエリがマスクの影響を受けます。 機密データを表示する明示的なアクセス許可を持たないユーザーに対しては、クエリ結果にマスクされた値が表示され、データを表示する明示的なアクセス許可を持つユーザーに対しては、マスクされていないデータが表示されます。 マスクには、既定、電子メール、ランダム、カスタム文字列の 4 種類があります。 この演習では、既定のマスク、電子メール マスク、およびカスタム文字列マスクを適用します。 + +1. ウェアハウスで **T-SQL** タイルを選択し、既定の SQL コードを次の T-SQL ステートメントに置き換えてテーブルを作成し、データを挿入および表示します。 + + ```tsql + CREATE TABLE dbo.Customers + ( + CustomerID INT NOT NULL, + FirstName varchar(50) MASKED WITH (FUNCTION = 'partial(1,"XXXXXXX",0)') NULL, + LastName varchar(50) NOT NULL, + Phone varchar(20) MASKED WITH (FUNCTION = 'default()') NULL, + Email varchar(50) MASKED WITH (FUNCTION = 'email()') NULL + ); + + INSERT dbo.Customers (CustomerID, FirstName, LastName, Phone, Email) VALUES + (29485,'Catherine','Abel','555-555-5555','catherine0@adventure-works.com'), + (29486,'Kim','Abercrombie','444-444-4444','kim2@adventure-works.com'), + (29489,'Frances','Adams','333-333-3333','frances0@adventure-works.com'); + + SELECT * FROM dbo.Customers; + + ``` + マスクされていないデータの表示が制限されているユーザーが、テーブルに対してクエリを実行すると、**FirstName** 列に XXXXXXX の文字列の最初の文字が表示され、これに続く文字は表示されません。 **Phone** 列に xxxx が表示されます。 **Email** 列に、メール アドレスの最初の文字が表示され、`XXX@XXX.com` がその後に続きます。 この方法により、機密データは保護されたままになりますが、制限されたユーザーもテーブルに対してクエリを実行することはできます。 + +2. **[▷ 実行]** ボタンを使用して SQL スクリプトを実行してください。これにより、データ ウェアハウスの **dbo** スキーマに **Customer** という名前の新しいテーブルが作成されます。 + +3. 次に、**[エクスプローラー]** ペインで **[スキーマ]** > **[dbo]** > **[テーブル]** の順に展開し、**Customer** テーブルが作成されていることを確認してください。 `SELECT` ステートメントは、マスクされていないデータを返します。これは、ワークスペースの作成者は、マスクされていないデータを表示できるワークスペース管理者ロールのメンバーであるためです。 + +4. **ビューアー** ワークスペース ロールのメンバーであるテスト ユーザーとして接続し、次の T-SQL ステートメントを実行します。 + + ```tsql + SELECT * FROM dbo.Customers; + ``` + テスト ユーザーには UNMASK アクセス許可が付与されていないため、FirstName、Phone、Email 列に対して返されるデータはマスクされます。これらの列は、`CREATE TABLE` ステートメント内でマスクを使用するものとして定義されているためです。 + +5. 自分自身のワークスペース管理者として再接続し、次の T-SQL を実行して、テスト ユーザー用のデータのマスクを解除します。 `@.com` を、現在のテスト対象の**ビューアー** ワークスペース ロールのメンバーであるユーザーの名前に置き換えます。 + + ```tsql + GRANT UNMASK ON dbo.Customers TO [@.com]; + ``` + +6. もう一度テスト ユーザーとして接続し、次の T-SQL ステートメントを実行します。 + + ```tsql + SELECT * FROM dbo.Customers; + ``` + + 今度はテスト ユーザーに `UNMASK` アクセス許可が付与されているため、データはマスクされていない状態で返されます。 + +## 行レベル セキュリティを適用する + +行レベル セキュリティ (RLS) を使用すると、ID またはクエリを実行するユーザーのロールに基づいて行へのアクセスを制限できます。 この演習では、インライン テーブル値関数として定義されたセキュリティ ポリシーとセキュリティ述語を作成して、行へのアクセスを制限します。 + +1. 前の演習で作成したウェアハウスで、**[新規 SQL クエリ]** ドロップダウンを選択します。 **[空白]** ヘッダーで、**[新規 SQL クエリ]** を選択します。 + +2. テーブルを作成してデータを挿入します。 後の手順で行レベル セキュリティをテストできるように、`@.com` をご利用の環境のユーザー名に置き換え、`@.com` を自分のユーザー名に置き換えます。 + + ```tsql + CREATE TABLE dbo.Sales + ( + OrderID INT, + SalesRep VARCHAR(60), + Product VARCHAR(10), + Quantity INT + ); + + --Populate the table with 6 rows of data, showing 3 orders for each test user. + INSERT dbo.Sales (OrderID, SalesRep, Product, Quantity) VALUES + (1, '@.com', 'Valve', 5), + (2, '@.com', 'Wheel', 2), + (3, '@.com', 'Valve', 4), + (4, '@.com', 'Bracket', 2), + (5, '@.com', 'Wheel', 5), + (6, '@.com', 'Seat', 5); + + SELECT * FROM dbo.Sales; + ``` + +3. **[▷ 実行]** ボタンを使用して SQL スクリプトを実行してください。これにより、データ ウェアハウスの **dbo** スキーマに **Sales** という名前の新しいテーブルが作成されます。 + +4. 次に、**[エクスプローラー]** ペインで **[スキーマ]** > **[dbo]** > **[テーブル]** の順に展開し、**Sales** テーブルが作成されていることを確認してください。 +5. 新しいスキーマ、関数として定義されたセキュリティ述語、セキュリティ ポリシーを作成します。 + + ```tsql + --Create a separate schema to hold the row-level security objects (the predicate function and the security policy) + CREATE SCHEMA rls; + GO + + /*Create the security predicate defined as an inline table-valued function. + A predicate evaluates to true (1) or false (0). This security predicate returns 1, + meaning a row is accessible, when a row in the SalesRep column is the same as the user + executing the query.*/ + + --Create a function to evaluate who is querying the table + CREATE FUNCTION rls.fn_securitypredicate(@SalesRep AS VARCHAR(60)) + RETURNS TABLE + WITH SCHEMABINDING + AS + RETURN SELECT 1 AS fn_securitypredicate_result + WHERE @SalesRep = USER_NAME(); + GO + + /*Create a security policy to invoke and enforce the function each time a query is run on the Sales table. + The security policy has a filter predicate that silently filters the rows available to + read operations (SELECT, UPDATE, and DELETE). */ + CREATE SECURITY POLICY SalesFilter + ADD FILTER PREDICATE rls.fn_securitypredicate(SalesRep) + ON dbo.Sales + WITH (STATE = ON); + GO + ``` + +6. ** [▷ 実行]** ボタンを使用して SQL スクリプトを実行します +7. 次に、**[エクスプローラー]** ペインで **[スキーマ]** > **[rls]** > **[関数]** の順に展開し、関数が作成されていることを確認します。 +8. Sales テーブルの `INSERT` ステートメントで、`@.com` を置き換えたユーザーとして Fabric にログインします。 次の T-SQL を実行して、そのユーザーとしてログインしていることを確認します。 + + ```tsql + SELECT USER_NAME(); + ``` + +9. **Sales** テーブルにクエリを実行して、行レベル セキュリティが予期したとおりに動作することを確認します。 ログイン中のユーザーに対して定義されたセキュリティ述語の条件を満たすデータのみが表示されるはずです。 + + ```tsql + SELECT * FROM dbo.Sales; + ``` + +## 列レベルのセキュリティを実装する + +列レベル セキュリティを使用すると、テーブル内の特定の列にアクセスできるユーザーを指定できます。 これは、テーブルに対して `GRANT` または `DENY` ステートメントを発行し、このときに列の一覧とそれらの読み取りが可能または可能でないユーザーまたはロールを指定することで実装されます。 アクセス管理を効率化するには、アクセス許可を個々のユーザーでなくロールに割り当てます。 この演習では、テーブルを作成し、テーブル上の列のサブセットへのアクセスを許可し、制限された列は自分以外のユーザーが表示できないことをテストします。 + +1. 前の演習で作成したウェアハウスで、**[新規 SQL クエリ]** ドロップダウンを選択します。 **[空白]** ヘッダーで、**[新規 SQL クエリ]** を選択します。 + +2. テーブルを作成し、テーブルにデータを挿入します。 + + ```tsql + CREATE TABLE dbo.Orders + ( + OrderID INT, + CustomerID INT, + CreditCard VARCHAR(20) + ); + + INSERT dbo.Orders (OrderID, CustomerID, CreditCard) VALUES + (1234, 5678, '111111111111111'), + (2341, 6785, '222222222222222'), + (3412, 7856, '333333333333333'); + + SELECT * FROM dbo.Orders; + ``` + +3. テーブル内の列を表示するためのアクセス許可を拒否します。 T-SQL ステートメントを使用すると、`@.com` は Orders テーブル内の CreditCard 列を表示できなくなります。 `DENY` ステートメントで、`@.com` をワークスペースに対する**ビューアー** アクセス許可を持つシステム内のユーザー名に置き換えます。 + + ```tsql + DENY SELECT ON dbo.Orders (CreditCard) TO [@.com]; + ``` + +4. 選択したアクセス許可を禁止したユーザーとして Fabric にログインして、列レベル セキュリティをテストします。 + +5. Orders テーブルに対してクエリを実行し、列レベル セキュリティが予期したとおりに動作することを確認します。 次のクエリでは、OrderID 列と CustomerID 列のみが返され、CreditCard 列は返されません。 + + ```tsql + SELECT * FROM dbo.Orders; + ``` + + CreditCard 列へのアクセスが制限されているため、エラーが表示されます。 OrderID フィールドと CustomerID フィールドのみを選択してみてください。このクエリは成功します。 + + ```tsql + SELECT OrderID, CustomerID from dbo.Orders + ``` + +## T-SQL を使用して SQL の詳細なアクセス許可を構成する + +Fabric にはアクセス許可モデルがあり、これを使用すると、ワークスペース レベルおよび項目レベルでデータへのアクセスを制御できます。 Fabric ウェアハウス内でセキュリティ保護可能なリソースを使用してユーザーが実行できる操作をより細かく制御する必要がある場合は、標準の SQL データ制御言語 (DCL) の `GRANT`、`DENY`、`REVOKE` の各コマンドを使用できます。 この演習では、オブジェクトを作成し、それらを `GRANT` と `DENY` を使用してセキュリティで保護し、その後クエリを実行して、詳細なアクセス許可の適用の効果を確かめます。 + +1. 前の演習で作成したウェアハウスで、**[新規 SQL クエリ]** ドロップダウンを選択します。 **[空白]** ヘッダーで、**[新規 SQL クエリ]** を選択します。 + +2. ストアド プロシージャとテーブルを作成します。 次に、このプロシージャを実行し、テーブルに対してクエリを実行します。 + + ```tsql + CREATE PROCEDURE dbo.sp_PrintMessage + AS + PRINT 'Hello World.'; + GO + + CREATE TABLE dbo.Parts + ( + PartID INT, + PartName VARCHAR(25) + ); + + INSERT dbo.Parts (PartID, PartName) VALUES + (1234, 'Wheel'), + (5678, 'Seat'); + GO + + /*Execute the stored procedure and select from the table and note the results you get + as a member of the Workspace Admin role. Look for output from the stored procedure on + the 'Messages' tab.*/ + EXEC dbo.sp_PrintMessage; + GO + + SELECT * FROM dbo.Parts + ``` + +3. 次に、**ワークスペース ビューアー** ロールのメンバーであるユーザーに、テーブルに対する `DENY SELECT` アクセスを許可し、同じユーザーに対してプロシージャで `GRANT EXECUTE` を実行します。 `@.com` を**ワークスペース ビューアー** ロールのメンバーであるご利用の環境のユーザー名に置き換えます。 + + ```tsql + DENY SELECT on dbo.Parts to [@.com]; + + GRANT EXECUTE on dbo.sp_PrintMessage to [@.com]; + ``` + +4. Fabric に、`DENY` の代わりに `GRANT` ステートメントと `@.com` ステートメントで指定したユーザーとしてサインインします。 次に、ストアド プロシージャを実行し、テーブルに対してクエリを実行して、適用した詳細なアクセス許可をテストします。 + + ```tsql + EXEC dbo.sp_PrintMessage; + GO + + SELECT * FROM dbo.Parts; + ``` + +## リソースをクリーンアップする + +この演習では、テーブル内の列に対して T-SQL を使用して動的データ マスク ルールを適用し、行レベル セキュリティを適用し、列レベル セキュリティを実装し、SQL の詳細なアクセス許可を構成しました。 + +1. 左側のナビゲーション バーで、ワークスペースのアイコンを選択して、それに含まれるすべての項目を表示します。 +2. 上部のツール バーのメニューで、**[ワークスペース設定]** を選択します。 +3. **[全般]** セクションで、**[このワークスペースの削除]** を選択します。 diff --git a/Instructions/Labs/07-real-time-Intelligence.md b/Instructions/Labs/07-real-time-Intelligence.md new file mode 100644 index 0000000..5533ee5 --- /dev/null +++ b/Instructions/Labs/07-real-time-Intelligence.md @@ -0,0 +1,141 @@ +--- +lab: + title: Microsoft Fabric のリアルタイム インテリジェンスの使用を開始する + module: Get started with Real-Time Intelligence in Microsoft Fabric +--- + +# Microsoft Fabric のリアルタイム インテリジェンスの使用を開始する + +Microsoft Fabric には、Kusto 照会言語 (KQL) を使ってデータの保存とクエリを行うために使用できるランタイムが用意されています。 Kusto は、ログ ファイルや IoT デバイスからのリアルタイム データなどの時系列コンポーネントを含むデータ向けに最適化されています。 + +このラボの所要時間は約 **30** 分です。 + +> **注**:この演習を完了するには、[Microsoft Fabric 試用版](https://learn.microsoft.com/fabric/get-started/fabric-trial)が必要です。 + +## ワークスペースの作成 + +Fabric でデータを操作する前に、Fabric 試用版を有効にしてワークスペースを作成してください。 + +1. [Microsoft Fabric ホーム ページ](https://app.fabric.microsoft.com)で、**[リアルタイム インテリジェンス]** を選択します。 +1. 左側のメニュー バーで、 **[ワークスペース]** を選択します (アイコンは 🗇 に似ています)。 +1. 任意の名前で新しいワークスペースを作成し、Fabric 容量を含むライセンス モード ("試用版"、*Premium*、または *Fabric*) を選択します。** +1. 開いた新しいワークスペースは空のはずです。 + + ![Fabric の空のワークスペースを示すスクリーンショット。](./Images/new-workspace.png) + +## KQL データベースのファイルをダウンロードする + +ワークスペースが作成されたので、次に分析するデータ ファイルをダウンロードします。 + +1. [https://raw.githubusercontent.com/MicrosoftLearning/dp-data/main/sales.csv](https://raw.githubusercontent.com/MicrosoftLearning/dp-data/main/sales.csv) からこの演習用のデータ ファイルをダウンロードし、ローカル コンピューター (または該当する場合はラボ VM) に **sales.csv** として保存します。 +1. **Microsoft Fabric** エクスペリエンスが表示されているブラウザー ウィンドウに戻ります。 + +## KQL データベースを作成する + +Kusto クエリ言語 (KQL) は、KQL データベースで定義されているテーブル内の静的またはストリーミング データに対してクエリを実行するために使用されます。 売上データを分析するには、KQL データベースにテーブルを作成し、ファイルからデータを取り込む必要があります。 + +1. **Microsoft Fabric** エクスペリエンス ポータルで、次に示すように**リアルタイム インテリジェンス** エクスペリエンス イメージを選択します。 + + ![リアルタイム インテリジェンスが選択されている、選択された Fabric Experience ホームのスクリーンショット](./Images/fabric-experience-home.png) + +2. **リアルタイム インテリジェンス** エクスペリエンスの **[ホーム]** ページで、**[KQL データベース]** を選択し、任意の名前の新しいデータベースを作成します。 +3. 新しいデータベースが作成されたら、 **[ローカル ファイル]** からデータを取得するオプションを選択します。 次に、ウィザードを使用し、次のオプションを選択して新しいテーブルにデータをインポートします。 + - **[宛先]** : + - **[データベース]** : *作成したデータベースが既に選択されています* + - **Table**:[新しいテーブル] の左側にある + 記号をクリックして、**sales** "という新しいテーブルを作成します"。******** + + ![新しいテーブル ウィザードの手順 1](./Images/import-wizard-local-file-1.png?raw=true) + + - 同じウィンドウに **[ファイルをここにドラッグ] または [ファイルの参照]** ハイパーリンクが表示されます。 + + ![新しいテーブル ウィザードの手順 2](./Images/import-wizard-local-file-2.png?raw=true) + + - **sales.csv** を参照するか画面にドラッグし、[状態] ボックスが緑色のチェック ボックスに変わるまで待ち、**[次へ]** を選びます + + ![新しいテーブル ウィザードの手順 3](./Images/import-wizard-local-file-3.png?raw=true) + + - この画面で、列見出しが 1 行目にあり、システムによって検出されていますが、エラーが発生しないように、これらの行の上にあるスライダー **[1 行目は列ヘッダーです]** を動かす必要があります。 + + ![新しいテーブル ウィザードの手順 4](./Images/import-wizard-local-file-4.png?raw=true) + + - このスライダーを選び、すべてが適切に表示されたら、パネルの右下にある **[完了]** ボタンを選びます。 + + ![新しいテーブル ウィザードの手順 5](./Images/import-wizard-local-file-5.png?raw=true) + + - 概要画面で以下のような手順が完了するまで待ちます。 + - テーブル (sales) を作成する + - マッピングを作成する (sales_mapping) + - データ キュー + - インジェスト + - **[閉じる]** ボタンを選びます + + ![新しいテーブル ウィザードの手順 6](./Images/import-wizard-local-file-6.png?raw=true) + +> **注**: この例では、ごく少量の静的データをファイルからインポートしました。この演習の目的のためにはそれで十分です。 実際には、Kusto を使用してもっと大量のデータ (Azure Event Hubs のようなストリーミング ソースからのデータなど) を分析できます。 + +## KQL を使用して売上テーブルのクエリを実行する + +データベースにデータのテーブルができたので、KQL コードを使用してクエリを実行できます。 + +1. **sales** テーブルが強調表示されていることを確認します。 メニュー バーから **[クエリ テーブル]** ドロップダウンを選択し、そこから **[任意の 100 件のレコードを表示する]** を選択します。 + +2. 新しいペインが開き、クエリとその結果が表示されます。 + +3. 次のように、クエリを変更します。 + + ```kusto + sales + | where Item == 'Road-250 Black, 48' + ``` + +4. クエリを実行します。 その後、結果を確認します。これには、*Road-250 Black, 48* 製品の販売注文の行のみが含まれています。 + +5. 次のように、クエリを変更します。 + + ```kusto + sales + | where Item == 'Road-250 Black, 48' + | where datetime_part('year', OrderDate) > 2020 + ``` + +6. クエリを実行し、結果を確認します。これには、2020 年より後に行われた *Road-250 Black, 48* の販売注文のみが含まれています。 + +7. 次のように、クエリを変更します。 + + ```kusto + sales + | where OrderDate between (datetime(2020-01-01 00:00:00) .. datetime(2020-12-31 23:59:59)) + | summarize TotalNetRevenue = sum(UnitPrice) by Item + | sort by Item asc + ``` + +8. クエリを実行し、結果を確認します。これには、2020 年 1 月 1 日から 12 月 31 日までの各製品の合計純収益が製品名の昇順で含まれています。 +9. **[KQL クエリセットとして保存]** を選択し、クエリを **Revenue by Product** として保存します。 + +## KQL クエリセットから Power BI レポートを作成する + +Power BI レポートの基礎として KQL クエリセットを使用できます。 + +1. クエリ セットのクエリ ワークベンチ エディターで、クエリを実行し、結果を待ちます。 +2. **[Power BI レポートを構築]** を選択し、レポート エディターが開くのを待ちます。 +3. レポート エディターの **[データ]** ペインで、 **[Kusto クエリ結果]** を展開し、**Item** と **TotalRevenue** フィールドを選択します。 +4. レポート デザイン キャンバスで、追加されたテーブルの視覚化を選択し、 **[視覚化]** ペインで **[集合横棒グラフ]** を選択します。 + + ![KQL クエリからのレポートのスクリーンショット。](./Images/kql-report.png) + +5. **Power BI** ウィンドウの **[ファイル]** メニューで、 **[保存]** を選択します。 次に、レイクハウスと KQL データベースが定義されているワークスペースで、 **[ビジネス以外]** の秘密度ラベルを使用して **Revenue by Item.pbix** としてレポートを保存します。 +6. **Power BI** ウィンドウを閉じ、左側のバーでワークスペースのアイコンを選択します。 + + 必要に応じて [ワークスペース] ページを更新して、含まれるすべての項目を表示します。 + +7. ワークスペース内の項目の一覧に、**Revenue by Item** レポートが一覧表示されていることに注意してください。 + +## リソースをクリーンアップする + +この演習では、レイクハウスにアップロードされたデータを分析する KQL データベースであるレイクハウスを作成しました。 KQL を使用してデータのクエリを実行し、クエリ セットを作成し、Power BI レポートの作成に使用しました。 + +KQL データベースの探索が完了したら、この演習用に作成したワークスペースを削除できます。 + +1. 左側のバーで、ワークスペースのアイコンを選択します。 +2. ツール バーの **[...]** メニューで、 **[ワークスペースの設定]** を選択します。 +3. **[全般]** セクションで、**[このワークスペースの削除]** を選択します。 diff --git a/Instructions/Labs/07-real-time-analytics.md b/Instructions/Labs/07-real-time-analytics.md index cc12125..e94b2d6 100644 --- a/Instructions/Labs/07-real-time-analytics.md +++ b/Instructions/Labs/07-real-time-analytics.md @@ -138,4 +138,4 @@ KQL データベースの探索が完了したら、この演習用に作成し 1. 左側のバーで、ワークスペースのアイコンを選択します。 2. ツール バーの **[...]** メニューで、 **[ワークスペースの設定]** を選択します。 -3. **[その他]** セクションで、 **[このワークスペースの削除]** を選択してください。 +3. **[全般]** セクションで、**[このワークスペースの削除]** を選択します。 diff --git a/Instructions/Labs/08-data-science-get-started.md b/Instructions/Labs/08-data-science-get-started.md index 34a9e51..641b29f 100644 --- a/Instructions/Labs/08-data-science-get-started.md +++ b/Instructions/Labs/08-data-science-get-started.md @@ -94,7 +94,7 @@ Fabric でデータを操作する前に、Fabric 試用版を有効にしてワ 出力には、Diabetes データセットの行と列が表示されます。 1. レンダリングされたテーブルの上部には、**テーブル**と**グラフ**という 2 つのタブがあります。 **[グラフ]** を選択します。 -1. グラフの右上にある **[表示オプション]** を選択して視覚化を変更します。 +1. グラフの右上にある **[Customize chart] (グラフのカスタマイズ)** を選択して視覚化を変更します。 1. グラフを以下の設定に変更します。 * **グラフの種類**: `Box plot` * **キー**: "空のままにします"** @@ -112,8 +112,7 @@ Fabric でデータを操作する前に、Fabric 試用版を有効にしてワ df.head() ``` -1. ノートブック リボンの **[データ]** を選択した後、**[Data Wrangler の DataFrame の変換]** ドロップダウンを選択します。 -1. `df` データセットを選択します。 Data Wrangler が起動すると、データフレームの説明的な概要が **[概要]** パネルに生成されます。 +1. ノートブック リボンの **[Data Wrangler] (データ ラングラー)** を選択し、`df` データセットを選択します。 Data Wrangler が起動すると、データフレームの説明的な概要が **[概要]** パネルに生成されます。 現在、ラベル列は `Y` で、これは連続変数です。 Y を予測する機械学習モデルをトレーニングするには、回帰モデルをトレーニングする必要があります。 Y の (予測された) 値は解釈が困難な場合があります。 代わりに、ある人が糖尿病を発症するリスクが低いか高いかを予測する分類モデルのトレーニングを確認することができます。 分類モデルをトレーニングできるようにするには、`Y` の値に基づいてバイナリ ラベル列を作成する必要があります。 @@ -247,5 +246,5 @@ Microsoft Fabric では、すべての実験を追跡し、それらを視覚的 モデルと実験の確認が完了したら、この演習用に作成したワークスペースを削除して構いません。 1. 左側のバーで、ワークスペースのアイコンを選択して、それに含まれるすべての項目を表示します。 -2. ツール バーの **[...]** メニューで、 **[ワークスペースの設定]** を選択します。 -3. **[その他]** セクションで、 **[このワークスペースの削除]** を選択してください。 +2. ツール バーの **[...]** メニューで、 **[ワークスペースの設定]** を選択してください。 +3. **[全般]** セクションで、**[このワークスペースの削除]** を選択します。 diff --git a/Instructions/Labs/08a-data-science-explore-data.md b/Instructions/Labs/08a-data-science-explore-data.md index 698169f..bca7d28 100644 --- a/Instructions/Labs/08a-data-science-explore-data.md +++ b/Instructions/Labs/08a-data-science-explore-data.md @@ -296,4 +296,4 @@ BMI の特徴量を検証し、分布をプロットして、その特性をよ 1. 左側のバーで、ワークスペースのアイコンを選択して、それに含まれるすべての項目を表示します。 2. ツール バーの **[...]** メニューで、 **[ワークスペースの設定]** を選択してください。 -3. **[その他]** セクションで、 **[このワークスペースの削除]** を選択してください。 +3. **[全般]** セクションで、**[このワークスペースの削除]** を選択します。 diff --git a/Instructions/Labs/08b-data-science-preprocess-data-wrangler.md b/Instructions/Labs/08b-data-science-preprocess-data-wrangler.md index 8fb7c8c..626191b 100644 --- a/Instructions/Labs/08b-data-science-preprocess-data-wrangler.md +++ b/Instructions/Labs/08b-data-science-preprocess-data-wrangler.md @@ -310,5 +310,5 @@ Fabric でデータを操作する前に、Fabric 試用版を有効にしてワ 前処理ステップの探索が終了したら、この演習用に作成したワークスペースを削除できます。 1. 左側のバーで、ワークスペースのアイコンを選択して、それに含まれるすべての項目を表示します。 -2. ツール バーの **[...]** メニューで、 **[ワークスペースの設定]** を選択します。 -3. **[その他]** セクションで、 **[このワークスペースの削除]** を選択してください。 +2. ツール バーの **[...]** メニューで、 **[ワークスペースの設定]** を選択してください。 +3. **[全般]** セクションで、**[このワークスペースの削除]** を選択します。 diff --git a/Instructions/Labs/08c-data-science-train.md b/Instructions/Labs/08c-data-science-train.md index fff185d..ba6b977 100644 --- a/Instructions/Labs/08c-data-science-train.md +++ b/Instructions/Labs/08c-data-science-train.md @@ -264,5 +264,5 @@ Microsoft Fabric では、すべての実験を追跡し、それらを視覚的 モデルと実験の確認が完了したら、この演習用に作成したワークスペースを削除して構いません。 1. 左側のバーで、ワークスペースのアイコンを選択して、それに含まれるすべての項目を表示します。 -2. ツール バーの **[...]** メニューで、 **[ワークスペースの設定]** を選択します。 -3. **[その他]** セクションで、 **[このワークスペースの削除]** を選択してください。 +2. ツール バーの **[...]** メニューで、 **[ワークスペースの設定]** を選択してください。 +3. **[全般]** セクションで、**[このワークスペースの削除]** を選択します。 diff --git a/Instructions/Labs/08d-data-science-batch.md b/Instructions/Labs/08d-data-science-batch.md index 60464ec..c4b5254 100644 --- a/Instructions/Labs/08d-data-science-batch.md +++ b/Instructions/Labs/08d-data-science-batch.md @@ -209,5 +209,5 @@ Fabric でデータを操作する前に、Fabric 試用版を有効にしてワ ノートブックの詳細の確認が終了したら、この演習用に作成したワークスペースを削除して構いません。 1. 左側のバーで、ワークスペースのアイコンを選択して、それに含まれるすべての項目を表示します。 -2. ツール バーの **[...]** メニューで、 **[ワークスペースの設定]** を選択します。 -3. **[その他]** セクションで、 **[このワークスペースの削除]** を選択してください。 +2. ツール バーの **[...]** メニューで、 **[ワークスペースの設定]** を選択してください。 +3. **[全般]** セクションで、**[このワークスペースの削除]** を選択します。 diff --git a/Instructions/Labs/09-real-time-analytics-eventstream.md b/Instructions/Labs/09-real-time-analytics-eventstream.md index 1c7e0e9..2023c70 100644 --- a/Instructions/Labs/09-real-time-analytics-eventstream.md +++ b/Instructions/Labs/09-real-time-analytics-eventstream.md @@ -3,7 +3,7 @@ lab: title: Microsoft Fabric の Eventstream に関する概要 module: Get started with Eventstream in Microsoft Fabric --- -# Real Time Analytics (RTA) での Eventstream の概要 +# リアルタイム インテリジェンスにおける Eventstream の概要 Eventstream とは、コードなしのエクスペリエンスでリアルタイム イベントをキャプチャし、変換し、さまざまな宛先にルーティングする Microsoft Fabric の機能です。 変換が必要な場合は、イベントのデータ ソース、ルーティング先、イベント プロセッサを Eventstream に追加できます。 Microsoft Fabric の EventStore は、クラスターからのイベントを維持し、特定の時点でのクラスターまたはワークロードの状態を理解できるようにする監視オプションです。 EventStore サービスでは、クラスター内のエンティティとエンティティ型のそれぞれで使用できるイベントのクエリを実行できます。 つまり、クラスター、ノード、アプリケーション、サービス、パーティション、パーティション レプリカなど、さまざまなレベルのイベントにクエリを実行できます。 EventStore サービスは、クラスター内のイベントを関連付ける機能も備えています。 EventStore サービスは、相互に影響を与えた可能性がある異なるエンティティから同時に書き込まれたイベントを調べてそれらのイベントをリンクし、クラスター内で発生したアクティビティの原因の識別に役立てることができます。 Microsoft Fabric クラスターの監視と診断を行うもう 1 つのオプションが、EventFlow を使用したイベントの集計と収集です。 @@ -21,7 +21,7 @@ Fabric でデータを操作する前に、Fabric 試用版を有効にしてワ 4. 新しいワークスペースを開くと次に示すように空のはずです。 ![Power BI の空のワークスペースのスクリーンショット。](./Images/new-workspace.png) -5. Power BI ポータルの左下で、 **[Power BI]** アイコンを選択し、**Real-Time Analytics** エクスペリエンスに切り替えます。 +5. Power BI ポータルの左下で、**[Power BI]** アイコンを選択し、**リアルタイム インテリジェンス** エクスペリエンスに切り替えます。 ## シナリオ @@ -29,41 +29,52 @@ Fabric Eventstream を使用すると、イベント データを 1 か所で簡 このラボは、株式市場データと呼ばれるサンプル ストリーミング データに基づいています。 株式市場サンプル データは、時刻、シンボル、価格、数量などの事前設定されたスキーマ列を含む証券取引所のデータセットです。 このサンプル データを使用して、株価のリアルタイム イベントをシミュレートし、KQL データベースなどのさまざまな宛先で分析します。 -リアルタイム分析のストリーミングおよびクエリ機能を使用して、株価統計に関する重要な質問に答えます。 このシナリオでは、KQL データベースなどの一部のコンポーネントを個別に手動で作成する代わりに、ウィザードを最大限に活用します。 +リアルタイム インテリジェンスのストリーミングおよびクエリ機能を使用して、株価統計に関する主な質問に回答します。 このシナリオでは、KQL データベースなどの一部のコンポーネントを個別に手動で作成する代わりに、ウィザードを最大限に活用します。 このチュートリアルで学習する内容は次のとおりです。 +- Eventhouse を作成する - KQL データベースを作成する - OneLake へのデータ コピーを有効にする - Eventstream を作成する - Eventstream から KQL データベースにデータをストリーミングする - KQL と SQL を使用してデータを探索する +## リアルタイム インテリジェンス イベントハウスを作成する + +1. Microsoft Fabric でリアルタイム インテリジェンス オプションを選択します。 +1. メニュー バーからイベントハウスを選択し、イベントハウスに名前を付けます。 + + ![イベントハウスの作成の画像](./Images/create-eventhouse.png) + ## KQL データベースを作成する -1. **Real-Time Analytics** で、 **[KQL データベース]** ボックスを選択します。 +1. **[リアルタイム インテリジェンス イベントハウス]** ダッシュボード内で、**[KQL データベース +]** ボックスを選択します。 +1. データベースに名前を付け **[新しいデータベース (既定)]** を選択するか、**[新しいショートカット データベース (フォロワー)]** を作成する選択肢があります。 +1. **[作成]** を選択します - ![KQL データベースの選択の画像](./Images/select-kqldatabase.png) + >[!Note] + > フォロワー データベース機能により、別のクラスターにあるデータベースを Azure Data Explorer クラスターにアタッチできます。 フォロワー データベースは "読み取り専用" モードでアタッチされるため、データを表示したり、リーダー データベースに取り込まれたデータに対してクエリを実行したりできます。 フォロワー データベースには、リーダー データベースの変更が同期されます。 この同期により、データが利用可能になるまでに数秒から数分のデータ遅延が発生します。 遅延の長さは、リーダー データベースのメタデータ全体のサイズに応じて異なります。 リーダー データベースとフォロワー データベースでは、データをフェッチするために同じストレージ アカウントが使用されます。 ストレージを所有するのはリーダー データベースです。 フォロワー データベースでは、データを取り込むことなくデータを表示できます。 アタッチされたデータベースは読み取り専用のデータベースであるため、データベース内のデータ、テーブル、およびポリシーの変更はできませんが、キャッシュ ポリシー、プリンシパル、およびアクセス許可の変更は可能です。 -2. KQL データベースに**名前を付ける**ダイアログが表示されます + ![KQL データベースの選択の画像](./Images/create-kql-database-eventhouse.png) - ![KQL データベースの名前付けの画像](./Images/name-kqldatabase.png) +4. KQL データベースに**名前を付ける**ダイアログが表示されます -3. KQL データベースに、覚えやすい名前 (**MyStockData** など) を指定し、 **[作成]** を押します。 + ![KQL データベースの名前付けの画像](./Images/name-kqldatabase.png) -1. **[データベースの詳細]** パネルで、鉛筆アイコンを選択して OneLake で可用性を有効にします。 +5. KQL データベースに **Eventhouse-HR** などの覚えやすい名前を付けて、**[作成]** を押します。 - ![OneLake の有効化の画像](./Images/enable-onelake-availability.png) +6. **[データベースの詳細]** パネルで、鉛筆アイコンを選択して OneLake で可用性を有効にします。 -2. ボタンを **[アクティブ]** に切り替えてから、 **[完了]** を選択してください。 + [ ![onlake の有効化の画像](./Images/enable-onelake-availability.png) ](./Images/enable-onelake-availability-large.png) - > **注:** フォルダーを選択する必要はありません。Fabric によって作成されます。 +7. ボタンを **[アクティブ]** に切り替えてから、 **[完了]** を選択してください。 ![OneLake トグルの有効化の画像](./Images/enable-onelake-toggle.png) ## Eventstream を作成する -1. メニュー バーで **[Real-Time Analytics]** を選択します (アイコンは ![rta ロゴ](./Images/rta_logo.png)に似ています) +1. メニュー バーで **[リアルタイム インテリジェンス]** を選択します (アイコンは![リアルタイム インテリジェンスのロゴ](./Images/rta_logo.png)に似ています) 2. **[新規]** で **[Eventstream (プレビュー)]** を選択します ![Eventstream の選択の画像](./Images/select-eventstream.png) @@ -72,40 +83,80 @@ Fabric Eventstream を使用すると、イベント データを 1 か所で簡 ![Eventstream の名前付けの画像](./Images/name-eventstream.png) -## Eventstream のソースと宛先を確立する +4. **新しい Eventstream** に**名前を付け**、**[拡張機能 (プレビュー)]** オプションを選択し、**[作成]** ボタンを選択します。 + + >[!注:] ワークスペース内での新しいイベント ストリームの作成は、数分で完了します。 確立が完了すると、プライマリ エディターに自動的にリダイレクトされ、ソースをイベント ストリームに統合する準備が整います。 + +## Eventstream ソースを確立する 1. Eventstream キャンバスで、ドロップダウン リストから **[新しいソース]** を選択し、 **[サンプル データ]** を選択します。 - ![Eventstream キャンバスの画像](./Images/real-time-analytics-canvas.png) + [ ![サンプル データの使用の画像](./Images/eventstream-select-sample-data.png) ](./Images/eventstream-select-sample-data-large.png#lightbox) + +2. **[ソースの追加]** で、ソースに名前を付け、**Bicycles Reflex 互換) を選択します +1. **追加** ボタンを選択します。 + + ![サンプル データ イベント ストリームを選択してこれに名前を付けます](./Images/eventstream-sample-data.png) + +1. **[追加]** ボタンを選択すると、ストリームがマップされ、**[Eventstream キャンバス]** に自動的にリダイレクトされます。 + + [ ![Eventstream キャンバスの確認](./Images/real-time-intelligence-eventstream-sourced.png) ](./Images/real-time-intelligence-eventstream-sourced-large.png#lightbox) + +3. 次の表に示すように、サンプル データの値を入力し、**[追加]** を選択します。 + + > [!注:] サンプル データ ソースを作成すると、編集モードのキャンバス上で Eventstream にそれが追加されます。 この新しく追加されたサンプル データを実装するには、**[発行]** を選択します。 + +## イベントの変換または宛先の追加アクティビティを追加する + +1. 発行後、**[イベントの変換または宛先の追加]** を選択した後、オプションとして **[KQL データベース]** を選択できます。 + + [ ![Eventstream の宛先として KQL データベースを設定](./Images/select-kql-destination.png) ](./Images/select-kql-destination-large.png) + + +2. 多くのオプションを提供する新しいサイド パネルが開きます。 KQL データベースに関する必要な詳細を入力します。 + + [ ![KQL データベース Eventstream とインジェスト モード](./Images/kql-database-event-processing-before-ingestion.png) ](./Images/kql-database-event-processing-before-ingestion.png) + + - **データ インジェスト モード:** KQL データベースにデータを取り込むには以下の 2 つの方法があります。 + - ***直接インジェスト***: データを変換せずに KQL テーブルに直接取り込みます。 + - ***取り込み前のイベント処理***: データを KQL テーブルに送信する前に、イベント プロセッサを使用して変換します。 + + > [!WARNING] + > **警告:** KQL データベースの宛先が Eventstream に追加されると、インジェスト モードを編集することは**できません**。 + + - **宛先名**: この Eventstream の宛先の名前 (例: "kql-dest") を入力します。 + - **ワークスペース**: KQL データベースが配置されている場所。 + - **KQL データベース**: KQL データベースの名前。 + - **宛先テーブル**: KQL テーブルの名前。 たとえば、"bike-count" などの名前を入力して新しいテーブルを作成することもできます。 + - **入力データ形式:** KQL テーブルのデータ形式として JSON を選択します。 + + +3. **[保存]** を選択します。 +4. **公開**を選択します。 -2. 次の表に示すように、サンプル データの値を入力し、**[追加]** を選択します。 +## イベントを変換する - | フィールド | 推奨値 | - | ----------- | ----------------- | - | ソース名 | StockData | - | サンプル データ | 株式市場 | +1. **[Eventstream]** キャンバス内で、**[イベントの変換]** を選択します。 -3. 次に、 **[新しい宛先]** を選択して宛先を追加してから、 **[KQL データベース]** を選択します + A. **[Group by]** を選択します。 - ![Eventstream の宛先の画像](./Images/new-kql-destination.png) + B. ***[鉛筆]*** アイコンで示されている **[編集]** を選択します。 -4. KQL データベースの構成で、次の表を使用して構成を完了します。 + C: **[Group by]** 設定セクションのプロパティを入力する - | フィールド | 推奨値 | - | ---------------- | ---------------------------------------------- | - | 宛先名 | MyStockData | - | ワークスペース | KQL データベースを作成したワークスペース | - | KQL データベース | MyStockData | - | [ターゲット テーブル]| MyStockData | - | 入力データ形式| JSON | + [ ![変換イベントに Goup by を追加します。](./Images/eventstream-add-aggregates.png) ](./Images/eventstream-add-aggregates-large.png) -3. **[追加]** を選択します。 +2. **[Group by]** 変換イベントを作成したら、**[Eventstream]** から **[Group by]** へと接続を行う必要があります。 これは、**[Eventstream]** の右側にあるドットをクリックし、それを新しい **[Group by]** ボックスの左側にあるドットまでドラッグすることで、コードを使用することなく実行できます。 -> **注**:データ インジェストはすぐに開始されます。 + [ ![Eventstream と Group by の間にリンクを追加します。](./Images/group-by-drag-connectors.png) ](./Images/group-by-drag-connectors-large.png) + +3. 同様に、**[イベント ストリーム]** と ***[kql_dest]*** の間の矢印にマウスオーバーして ***[ゴミ箱]*** を選択することができます + + [ ![2 つのイベントの間のリンクを削除する](./Images/delete-flow-arrows.png) ](./Images/delete-flow-arrows-large.png) + + > [!注:] コネクタを追加または削除するたびに、宛先オブジェクトを再構成する必要があります。 -すべてのステップが緑色のチェックマークでマークされるまで待ちます。 **[Eventsream からの継続的な取り込みが確立されました]** というページ タイトルが表示されるはずです。 その後、 **[閉じる]** を選択して Eventstream ページに戻ります。 -> **注**:Eventstream 接続が構築されて確立された後、テーブルを表示するには、ページを更新する必要がある場合があります。 ## KQL のクエリ @@ -113,40 +164,78 @@ Kusto 照会言語 (KQL) は、データを処理して結果を返すための > **注**: KQL エディターには構文と Inellisense 強調表示の両方が付属しています。これにより、Kusto 照会言語 (KQL) に関する知識をすばやく得ることができます。 -1. **MyStockData** という名前の、新しく作成され、ハイドレートされた KQL データベースを参照します。 -2. データ ツリーで、MyStockData テーブルのその他メニュー [...] を選択します。 次に、[クエリ テーブル] > [100 個のレコードを表示する] を選択します。 +1. 以下のように、新しく作成されハイドレートされた KQL データベースを参照します。 + + A. **[kql_dest]** を選択する + + B. **[関連アイテム]** 行にある **[アイテムを開く]** ハイパーリンクを選択する - ![KQL クエリ セットの画像](./Images/kql-query-sample.png) + [ ![2 つのイベントの間のリンクを削除する](./Images/navigate-to-data.png) ](./Images/navigate-to-data-large.png) + +1. データ ツリーで、***[Bike_sum]*** テーブル上のその他メニュー [...] を選択します。 次に、[クエリ テーブル] > [100 個のレコードを表示する] を選択します。 + + [ ![2 つのイベントの間のリンクを削除する](./Images/kql-query-sample.png) ](./Images/kql-query-sample-large.png) 3. サンプル クエリは、テーブル コンテキストが既に設定されている **[データを調査する]** ペインで開きます。 この最初のクエリは、take 演算子を使用してサンプル数のレコードを返します。データ構造と使用可能な値を最初に確認すると便利です。 自動設定されたサンプル クエリは自動的に実行されます。 結果ペインでクエリの結果を確認できます。 ![KQL クエリ結果の画像](./Images/kql-query-results.png) -4. データ ツリーに戻り、次のクエリを選択します。このクエリは、where 演算子と between 演算子を使用して、過去 24 時間以内に取り込まれたレコードを返します。 +4. データ ツリーに戻り、summarize 演算子を使用して 15 分間隔で取り込まれたレコードの数をカウントする次のクエリを選択します。 - ![過去 24 時間の KQL クエリの結果の画像](./Images/kql-query-results-last24.png) + ![KQL クエリ結果の画像](./Images/kql-query-results-15min-intervals.png) > **注**:クエリの制限を超えたという警告が表示される場合があります。 この動作は、データベースにストリーミングされるデータの量によって異なります。 引き続き、組み込みのクエリ関数の使用を試すことで、データを理解することができます。 -## サンプル SQL クエリ +## Copilot を使用したクエリ クエリ エディターでは、主要なクエリ Kusto 照会言語 (KQL) に加えて T-SQL の使用がサポートされています。 T-SQL は、KQL を使用できないツールで役立ちます。 詳細については、「[T-SQL を使用してデータのクエリを実行する](https://learn.microsoft.com/en-us/azure/data-explorer/t-sql)」を参照してください 1. データ ツリーに戻り、MyStockData テーブルで**その他メニュー** [...] を選択します。 **[クエリ テーブル] > [SQL] > [100 個のレコードを表示する]** を選択します。 - ![SQL クエリ サンプルの画像](./Images/sql-query-sample.png) + [ ![SQL クエリ サンプルの画像](./Images/sql-query-sample.png) ](./Images/sql-query-sample-large.png) 2. クエリ内のどこかにカーソルを置き、 **[実行]** を選択するか、**Shift キーを押しながら Enter キー**を押します。 ![SQL クエリ結果の画像](./Images/sql-query-results.png) -引き続き、組み込みの関数の使用を試すことで、SQL または KQL を使用したデータを理解することができます。 これでレッスンは終了です。 +引き続き、組み込みの関数の使用を試すことで、SQL または KQL を使用したデータを理解することができます。 + +## クエリセットを使用した機能 + +KQL (Kusto 照会言語) データベースのクエリセットはさまざまな目的で使用されますが、主には KQL データベースのデータに対するクエリの実行、表示、およびクエリ結果のカスタマイズのために使用されます。 これらは Microsoft Fabric のデータ クエリ機能の重要な要素であり、ユーザーが以下を実行することを可能にします。 + + - **クエリの実行:** KQL クエリを実行して、KQL データベースからデータを取得します。 + - **結果のカスタマイズ:** クエリ結果を表示および変更して、データの分析と解釈を容易にします。 + - **クエリの保存と共有:** クエリセット内に複数のタブを作成して、後で使用するためにクエリを保存したり、共同作業によるデータ探索のために他の人とクエリを共有したりします。 + - **SQL 関数のサポート:** クエリの作成に KQL を使用する上で、クエリセットは多くの SQL 関数もサポートして、データ クエリの柔軟性を提供します。 + - **Copilot の活用:** クエリを KQL クエリセットとして保存したら、表示を行うことができます + +クエリセットを保存するのは簡単であり、いくつかの方法があります。 + +1. **KQL データベース**で **[データの探索]** ツールを使用する際に、単に **[KQL クエリセットとして保存]** を選択するだけで済みます + + ![[データの探索] から KQL クエリセットを保存する](./Images/save-as-queryset.png) + +2. もう 1 つの方法は、リアルタイム インテリジェンスのランディング ページから行う方法で、ページから **[KQL クエリセット]** ボタンを選択した後、**[クエリセット]** に名前を付けます + + ![リアルタイム インテリジェンスのランディング ページから新しい KQL クエリセットを作成する](./Images/select-create-new-queryset.png) + +3. **[クエリセット ランディング ページ]** に移動すると、ツール バーに **[Copilot]** ボタンが表示されます。これを選択して **[Copilot ペイン]** を開き、データに関する質問を行います。 + + [ ![メニュー バーから Copilot を開く](./Images/open-copilot-in-queryset.png) ](./Images/open-copilot-in-queryset-large.png) + +4. **[Copilot ペイン]** では、ユーザーが質問を入力するだけで、**Copilot** が KQL クエリを生成し、ユーザーはそのクエリを***コピー***したり、クエリセット ウィンドウに***挿入**したりできます。 + + [ ![質問を行うことで Copilot クエリを記述する](./Images/copilot-queryset-results.png) ](./Images/copilot-queryset-results-large.png) + +5. この時点から、**[ダッシュボードへのピン留め]** または **[Power BI レポートの作成]** ボタンを使用して、個々のクエリを取得したりダッシュボードまたは Power BI レポート内で使用したりする選択肢があります。 ## リソースをクリーンアップする この演習では、KQL データベースを作成し、Eventstream を使用して継続的ストリーミングを設定しました。 その後、KQL と SQL を使用してデータにクエリを実行しました。 KQL データベースの探索が完了したら、この演習用に作成したワークスペースを削除できます。 1. 左側のバーで、ワークスペースのアイコンを選択します。 -2. ツール バーの [...] メニューで、[ワークスペース設定] を選択します。 -3. [その他] セクションで、 [このワークスペースの削除] を選択してください。 +2. ツール バーの **[...]** メニューで、 **[ワークスペースの設定]** を選択します。 +3. **[全般]** セクションで、**[このワークスペースの削除]** を選択します。 +. \ No newline at end of file diff --git a/Instructions/Labs/10-ingest-notebooks.md b/Instructions/Labs/10-ingest-notebooks.md index bca0274..b01f824 100644 --- a/Instructions/Labs/10-ingest-notebooks.md +++ b/Instructions/Labs/10-ingest-notebooks.md @@ -39,7 +39,7 @@ Fabric でデータを操作する前に、Fabric 試用版を有効にしてワ 1. **[ファイル]** から **[...]** を選択して **RawData** という名前の**新しいサブフォルダー**を作成します。 -1. レイクハウス内のレイクハウス エクスプローラーから、 **[ファイル] > [...] > [プロパティ]** を選択します。 +1. レイクハウス内のレイクハウス エクスプローラーから、**[RawData] > [...] > [プロパティ]** を選択します。 1. 後で使用するために、 **[RawData]** フォルダーの **ABFS パス**を空のメモ帳にコピーします。これは次のようになります。`abfss://{workspace_name}@onelake.dfs.fabric.microsoft.com/{lakehouse_name}.Lakehouse/Files/{folder_name}/{file_name}` @@ -229,4 +229,4 @@ Fabric でデータを操作する前に、Fabric 試用版を有効にしてワ 1. 左側のバーで、ワークスペースのアイコンを選択して、それに含まれるすべての項目を表示します。 2. ツール バーの **[...]** メニューで、 **[ワークスペースの設定]** を選択してください。 -3. **[その他]** セクションで、 **[このワークスペースの削除]** を選択してください。 +3. **[全般]** セクションで、**[このワークスペースの削除]** を選択します。 diff --git a/Instructions/Labs/11-data-activator.md b/Instructions/Labs/11-data-activator.md index 31f4521..e97d866 100644 --- a/Instructions/Labs/11-data-activator.md +++ b/Instructions/Labs/11-data-activator.md @@ -180,4 +180,4 @@ Data Activator Reflex の詳細の確認が完了したら、この演習用に 1. 左側のバーで、ワークスペースのアイコンを選択して、それに含まれるすべての項目を表示します。 2. ツール バーの **[...]** メニューで、 **[ワークスペースの設定]** を選択してください。 -3. **[その他]** セクションで、 **[このワークスペースの削除]** を選択してください。 +3. **[全般]** セクションで、**[このワークスペースの削除]** を選択します。 diff --git a/Instructions/Labs/12-query-data-in-kql-database.md b/Instructions/Labs/12-query-data-in-kql-database.md index 1177ff9..cc2a4c2 100644 --- a/Instructions/Labs/12-query-data-in-kql-database.md +++ b/Instructions/Labs/12-query-data-in-kql-database.md @@ -20,18 +20,18 @@ KQL クエリセットは、多くの SQL 関数と互換性のある Kusto 照 Fabric でデータを操作する前に、Fabric 試用版を有効にしてワークスペースを作成してください。 -1. [Microsoft Fabric ホーム ページ](https://app.fabric.microsoft.com)で、**Real-Time Analytics** を選択します。 +1. [Microsoft Fabric ホーム ページ](https://app.fabric.microsoft.com)で、**[リアルタイム インテリジェンス]** を選択します。 1. 左側のメニュー バーで、 **[ワークスペース]** を選択します (アイコンは 🗇 に似ています)。 1. 任意の名前で新しいワークスペースを作成し、Fabric 容量を含むライセンス モード ("試用版"、*Premium*、または *Fabric*) を選択します。** 1. 開いた新しいワークスペースは空のはずです。 ![Fabric の空のワークスペースを示すスクリーンショット。](./Images/new-workspace.png) -このラボでは、Fabric のリアルタイム分析 (RTA) を使って、サンプルのイベントストリームから KQL データベースを作成します。 Real-Time Analytics には、RTA の機能を探索するために使用できる便利なサンプル データセットが用意されています。 このサンプル データを使い、リアルタイム データを分析する KQL または SQL のクエリとクエリセットを作成し、ダウンストリームのプロセスで他の目的に使用できるようにします。 +このラボでは、Fabric のリアルタイム インテリジェンスを使用して、サンプルのイベントストリームから KQL データベースを作成します。 リアルタイム インテリジェンスには、リアルタイム インテリジェンスの機能を探索するために使用できる便利なサンプル データセットが用意されています。 このサンプル データを使い、リアルタイム データを分析する KQL または SQL のクエリとクエリセットを作成し、ダウンストリームのプロセスで他の目的に使用できるようにします。 ## KQL データベースを作成する -1. **Real-Time Analytics** で、 **[KQL データベース]** ボックスを選択します。 +1. **[リアルタイム インテリジェンス]** 内で、**[KQL データベース]** ボックスを選択します。 ![KQL データベースの選択の画像](./Images/select-kqldatabase.png) @@ -305,4 +305,4 @@ KQL データベースでは、T-SQL はネイティブにサポートされま この演習では、KQL データベースを作成し、クエリ用のサンプル データセットを設定しました。 その後、KQL と SQL を使ってデータにクエリを実行しました。 KQL データベースの探索が完了したら、この演習用に作成したワークスペースを削除できます。 1. 左側のバーで、ワークスペースの**アイコン**を選択します。 2. ツール バーの [...] メニューで、**[ワークスペース設定]** を選択します。 -3. **[その他]** セクションで、 **[このワークスペースの削除]** を選択してください。 +3. **[全般]** セクションで、**[このワークスペースの削除]** を選択します。 diff --git a/Instructions/Labs/13-real-time-dashboards.md b/Instructions/Labs/13-real-time-dashboards.md index 8f5fb25..84300e4 100644 --- a/Instructions/Labs/13-real-time-dashboards.md +++ b/Instructions/Labs/13-real-time-dashboards.md @@ -1,88 +1,180 @@ - -## ***作業ドラフト** --- lab: - title: リアルタイム ダッシュボード - module: Query data from a Kusto Query database in Microsoft Fabric + title: Microsoft Fabric のリアルタイム ダッシュボード + module: Get Started with Real-Time Dashboards in Microsoft Fabric --- -# Microsoft Fabric での Kusto データベースのクエリの概要 +# Microsoft Fabric でリアルタイム ダッシュボードの使用を開始する リアルタイム ダッシュボードでは、Kusto 照会言語 (KQL) を使って構造化データと非構造化データの両方を取得して Microsoft Fabric 内から分析情報を収集し、Power BI 内のスライサーと同様にリンクできるグラフ、散布図、テーブルなどをパネル内にレンダリングできます。 このラボの所要時間は約 **25** 分です。 -> **注**:この演習を完了するには、[Microsoft Fabric 試用版](https://learn.microsoft.com/fabric/get-started/fabric-trial)が必要です。 +> **注**:[Microsoft Fabric 試用版](https://learn.microsoft.com/fabric/get-started/fabric-trial)が、 この演習を完了するには必要です。 ## ワークスペースの作成 Fabric でデータを操作する前に、Fabric 試用版を有効にしてワークスペースを作成してください。 -1. [Microsoft Fabric ホーム ページ](https://app.fabric.microsoft.com)で、**Real-Time Analytics** を選択します。 +1. [Microsoft Fabric ホーム ページ](https://app.fabric.microsoft.com)で、**リアルタイム インテリジェンス**を選択します。 1. 左側のメニュー バーで、 **[ワークスペース]** を選択します (アイコンは 🗇 に似ています)。 -1. 任意の名前で新しいワークスペースを作成し、Fabric 容量を含むライセンス モード ("試用版"、*Premium*、または *Fabric*) を選択します。** +1. 任意の名前で新しいワークスペースを作成し、Fabric 容量を含むライセンス モード ("試用版"、*Premium*、または *Fabric*) を選択してください。** または、既存のワークスペースを使用して、リアルタイム ダッシュボードを作成することもできます。 1. 開いた新しいワークスペースは空のはずです。 ![Fabric の空のワークスペースを示すスクリーンショット。](./Images/new-workspace.png) -このラボでは、Fabric のリアルタイム分析 (RTA) を使って、サンプルのイベントストリームから KQL データベースを作成します。 Real-Time Analytics には、RTA の機能を探索するために使用できる便利なサンプル データセットが用意されています。 このサンプル データを使い、リアルタイム データを分析する KQL と、SQL のクエリとクエリセットを作成し、ダウンストリームのプロセスで他の目的に使用できるようにします。 +このラボでは、Fabric のリアルタイム インテリジェンスを使用して、リアルタイム ダッシュボードを作成します。 リアルタイム インテリジェンスには、リアルタイム インテリジェンスの機能を調べるために使用できる便利なサンプル データセットが用意されています。 このサンプル データを使い、リアルタイム データを分析する KQL と、SQL のクエリとクエリセットを作成し、ダウンストリームのプロセスで他の目的に使用できるようにします。 -## KQL データベースを作成する +## リアルタイム ダッシュボードの作成 -1. **Real-Time Analytics** で、 **[KQL データベース]** ボックスを選択します。 +1. **リアルタイム インテリジェンス**内で、**[リアルタイム ダッシュボード]** ボックスを選択します。 - ![KQL データベースの選択の画像](./Images/select-kqldatabase.png) + ![リアルタイム ダッシュボードの選択の画像](./Images/create-real-time-dashboard.png) -2. KQL データベースに**名前**を付けるよう求められます +2. リアルタイム ダッシュボードに**名前**を付けるためのメッセージが表示されます。 - ![KQL データベースの名前付けの画像](./Images/name-kqldatabase.png) + ![リアルタイム ダッシュボードの名前の画像。](./Images/new-real-time-dashboard.png) -3. KQL データベースに覚えやすい名前 (**MyStockData** など) を付けて、 **[作成]** を選択します。 +3. プライマリ ソースに基づく名前など、リアルタイム ダッシュボードに覚えている名前を付けて、**[作成]** を押します。 4. **[データベースの詳細]** パネルで、鉛筆アイコンを選択して OneLake で可用性を有効にします。 - ![OneLake の有効化の画像](./Images/enable-onelake-availability.png) + [![OneLake の有効化の画像。](./Images/real-time-dashboard-details.png)](./Images/real-time-dashboard-details-large.png#lightbox) + +## データ ソースを追加する + +データ ソースは、リアルタイム ダッシュボードと同じワークスペース内の特定のデータベース、またはクエリへの再利用可能な参照として機能し、さまざまなタイルでデータのニーズに合わせた個別のデータ ソースを利用できます。 + +1. **[管理]** タブを選択し、***メニュー バー***の **[新しいデータ ソース]** を選択します。 +1. **[データ ソース]** ウィンドウで **[+ 追加]** ボタンを選択します。 + + [![リアルタイム ダッシュボードに新しいデータ ソースを追加します。](./Images/add-data-source-to-real-time-dashboard-large.png)](./Images/add-data-source-to-real-time-dashboard-large.png#lightbox) + +1. **OneLake データ ハブ**または **Azure Data Explorer** の 2 つの主要なオプションのいずれかを選択します。 + + ![リアルタイム ダッシュボードのデータ ソースを選択します。](./Images/data-source-options-real-time-dashboards.png) + +1. ビジネス ニーズを満たす**データソース**を選択し、**[接続]** ボタンを選択します。 + + [![適切なデータソースを選択します。](./Images/select-onelake-data-hub.png)](./Images/select-onelake-data-hub-large.png#lightbox) + + > **注:** データソースに接続すると、選択した場所内でデータソースを確認する能力が得られ、追加のデータソースを作成できます。 + +1. **[新しいデータ ソースの作成]** ウィンドウで、**データソース接続**を確認し、**[作成]** を選択します。 + + [![[新しいデータ ソースの作成] でデータベースを確認します。](./Images/conected-now-create-datasource.png)](./Images/conected-now-create-datasource-large.png#lightbox) + +1. この時点で、**[n ページ]** の右側にある **[...]** を選択し、**[ページ名の変更]** を選択し、ページの名前をタイルの使用方法に適した名前に変更します。 +1. 次に、**[+ タイルの追加]** を選択します。 + + [![ページの名前を変更し、タイルを追加します。](./Images/rename-page-add-tile.png)](./Images/rename-page-add-tile-large.png#lightbox) + +1. **タイル クエリ ウィンドウ**にリダイレクトされます。このウィンドウでは、パラメーターを追加し、タイルをサポートするための基本クエリをプルできます。 + + [![クエリ ウィンドウと新しいデータ ソースの追加ペイン。](./Images/write-query-for-tile.png)](./Images/write-query-for-tile-large.png#lightbox) + + > **注:** 同じウィンドウのドロップダウン ウィンドウに、新しいデータ ソースを追加するオプションがあります。 このソースは、個人用ワークスペース内、またはアクセス権を持つ Evenhouse 内の別の KQL データベースが格納されている任意のワークスペースがある場合はそこに配置できます。 + +## クエリを作成する + +これは、リアルタイム ダッシュボード タイルでは、データの取得とビジュアルのレンダリングに Kusto クエリ言語スニペットを使用するためです。 各タイルとクエリは 1 つのビジュアルをサポートできます。 + +1. 各タイル内で、それらを新規または既存のタイルにピン留めし、ニーズに合わせて変更する場合は、**Copilot** に書き込む、またはここに貼り付けられます。 単純なクエリから、自転車の数に基づいてマップ上のサイズを使用するマップの視覚化を作成できます。 -5. ***[データの取得から開始]*** のオプションから **[サンプル データ]** ボックスを選択します。 - - ![サンプル データが強調表示されている選択オプションの画像](./Images/load-sample-data.png) +```kusto + +['Bike-count'] +BikepointID, Latitude, Longitude, No_Bikes + +``` + +## 視覚化の作成 + +視覚化が完了したら、**[変更の適用]** を選択し、リアルタイム ダッシュボードをサポートする視覚エフェクトを追加するか、**パラメーター**や**スケジュール**などの追加の手順を実行します。 + + [![KQL クエリから視覚化を作成します。](./Images/create-visual-in-tiles.png)](./Images/create-visual-in-tiles-large.png#lightbox) + +変更が適用されると、データが表示され、これをユーザーが読みやすく理解しやすくなるように調整できます。 + + [![自転車の視覚化マップに変更を適用しました。](./Images/first-published-visual.png)](./Images/first-published-visual-large.png#lightbox) + +引き続き、テーブル情報と視覚化情報を含む**新しいタイル**を作成して、ユーザー コミュニティを理解しやすく表現できます。 前述のように、**ページを追加**し、**新しいデータ ソースを**追加することもできます。 次に、ユーザーに表示される情報の量を操作して減らすのに役立つパラメーターを追加することに重点を置きます。 -6. サンプル データのオプションから **[自動車のメトリック分析]** ボックスを選択します。 +## パラメータを追加 +パラメーターによって、ダッシュボードのレンダリング効率を高められ、クエリ プロセスの最も早い段階でフィルター値を使用可能にできます。 タイルにリンクされたクエリにパラメーターを含めると、フィルター機能がアクティブになります。 パラメーターはダッシュボード全体で使用でき、複数のパラメーターで、基になる視覚化で表されるデータ (テーブルを含む) をフィルター処理できます。 - ![ラボの分析データを選ぶ画像](./Images/create-sample-data.png) +パラメーターの作成は簡単に開始できます。 -7. データの読み込みが完了したら、KQL データベースが設定されていることを確認できます。 +1. 上部メニューの[新しいパラメーター]ボタンを選択します。 [パラメーター] ペインが開きます。 +1. 右側のペインの上部で、[追加]ボタンを選択します。 - ![データを KQL データベースに読み込み中](./Images/choose-automotive-operations-analytics.png) + [![新しいパラメーターを追加します。](./Images/add-new-parameter.png)](./Images/add-new-parameter-large.png#lightbox) -7. データが読み込まれたら、データが KQL データベースに読み込まれたことを確認します。 この操作を行うには、テーブルの右側にある省略記号を選択し、**[クエリ テーブル]** に移動して、**[100 件のレコードの表示]** を選択します。 +1. パラメーターに関連するプロパティを入力します。 - ![RawServerMetrics テーブルから上位 100 個のファイルを選択している画像](./Images/rawservermetrics-top-100.png) + [![パラメーターの設定を構成します。](./Images/configure-parameter.png)](./Images/configure-parameter-large.png#lightbox) - > **注**:これを初めて実行する場合、コンピューティング リソースの割り当てに数秒かかる場合があります。 +1. パラメーターに関するより重要な機能の 1 つは、ユーザーに対して、基になる情報に関連するオプションのみを提供する**クエリの追加**機能です。 - ![データからの 100 件のレコードの画像](./Images/explore-with-kql-take-100.png) + ![パラメーターの選択にクエリを追加します。](./Images/add-lookup-query.png) +1. [完了] を選択してパラメーターを作成します。 -## シナリオ -このシナリオでは、Microsoft Fabric によって提供されるサンプル データに基づいて、さまざまな方法でデータを表示できるリアルタイム ダッシュボードを作成し、変数を作成し、この変数を使ってダッシュボードのパネルをリンクして、ソース システム内で起きていることについてのより詳細な分析情報を得ます。 このモジュールでは、ニューヨークのタクシー データセットを使って、区ごとの現在の交通の詳細などを表示します。 + [![構成を完了し、パラメーター設定で完了を選択します。](./Images/complete-parameter-settings.png)](./Images/complete-parameter-settings-large.png#lightbox) -1. Fabric のメイン ページで **[リアルタイム分析]** に移動してから **[リアルタイム ダッシュボード]** を選びます。 +### パラメーターのプロパティ - ![[リアルタイム ダッシュボード] を選びます。](./Images/select-real-time-dashboard.png) +| フィールド | 説明 | +|------------------|-------------| +| **ラベル** | ダッシュボードまたは編集カードに表示されるパラメーターの名前。 | +| **パラメーターの型** | 以下のいずれかのタイプです:
  • Single selection (単一選択) :パラメーターの入力としてフィルターで値を 1 つのみ選択できます。
  • [複数選択] :パラメーターの入力としてフィルターで値を 1 つまたは複数選択できます。
  • 時間の範囲:時間に基づいてクエリとダッシュボードをフィルター処理するための追加パラメーターの作成を有効にします。 すべてのダッシュボードに、既定の時間範囲のピッカーがあります。
  • 自由記載:ユーザーは、事前入力された値なしで、フィルター フィールドに値を入力するか貼り付け、使用した最近の値を保持できます。
| +| **説明** | パラメーターの説明 (省略可能)。 | +| **変数名** | クエリ内のパラメーターに使用される名前。 | +| **データの種類** | パラメーター値が表すデータの型。 | +| **[Show on pages](ページに表示)** | パラメーターが表示されるページ。すべてのページを選択するオプションがあります。 | +| **ソース** | パラメーター値の原点。次の値を指定できます。
  • 固定値:手動で入力された静的フィルター値。
  • クエリ:KQL クエリを使用して導入された動的な値。
| +| **[すべて選択]の値を追加** | 単一および複数の選択パラメーター型に適用できるこのオプションは、すべてのパラメーター値のデータを取得し、機能のためにクエリに統合される必要があります。 | +| **既定値** | ダッシュボードの初期レンダリング時に設定されるフィルターの既定値。 | -1. **[新しいタイルの追加]** ボタンを選びます。 +6. タイル内の各クエリにパラメーターを追加し、**[変更の適用]** を選択します。 +**KQL クエリの前** ```kusto +//Add the street parameter to each tile's query +['bike-count'] +| where No_Bikes > 0 +| project BikepointID, Latitude, Longitude, No_Bikes -Trips -| summarize ["Total Trip Distance"] = sum(trip_distance) by pickup_boroname -| project Borough = case(isempty(pickup_boroname) or isnull(pickup_boroname), "Unidentified", pickup_boroname), ["Total Trip Distance"] -| sort by Borough asc +``` + +**KQL クエリの後** +```kusto +//Add the street parameter to each tile's query +['bike-count'] +| where No_Bikes > 0 and Street == street +| project BikepointID, Latitude, Longitude, No_Bikes ``` -3. **[実行]** ボタンを押して、クエリにエラーがないことを確認します。 -4. パネルの右側にある **[ビジュアルの書式設定]** タブを選び、***[タイル名]*** と ***[視覚化タイプ]*** を指定します。 + [![タイル内の各クエリを、パラメーターを含めるように更新します。](./Images/update-each-query.png)](./Images/update-each-query-large.png#lightbox) + +## 自動更新を有効にする + +自動更新は、手動でのページ再読み込みや更新ボタンを押す必要なく、ダッシュボード データの自動更新を有効にする機能です。 自動更新の初期頻度は、データベース エディターによって構成できます。 エディターとビューアーの両方に、ダッシュボードの表示中に実際の自動更新レートを変更する機能があります。 データベース エディターには、クラスターに対する過剰な負荷を軽減するための最小リフレッシュ レートを確立する権限があります。 この最小レートを設定すると、データベース ユーザーは、指定された最小値より低い更新レートを選択できなくなります。 これにより、リソースに過剰な負荷をかけることなく、システムのパフォーマンスが維持されます。 + +1. [管理] タブ > [自動更新] を選択します。 + + [![自動更新機能を有効にします。](./Images/enable-auto-refresh.png)](./Images/enable-auto-refresh-large.png#lightbox) + +1. 自動更新が [有効] になるようにオプションを切り替えます。 +1. [Minimum time interval]\(最小時間間隔\) と [Default refresh rate]\(既定の更新頻度\) の値を選択します。 +1. [適用] を選択してから、ダッシュボードを保存します。 + + [![自動更新を有効にし、間隔を設定します。](./Images/enable-and-configure-refresh-rate.png)](./Images/enable-and-configure-refresh-rate-large.png#lightbox) + +## リソースをクリーンアップする - ![ビジュアルの書式設定タイルの画像。](./Images/visual-formatting-tile.png) +この演習では、KQL データベースを作成し、クエリ用のサンプル データセットを設定しました。 その後、KQL と SQL を使ってデータにクエリを実行しました。 KQL データベースの探索が完了したら、この演習用に作成したワークスペースを削除できます。 +1. 左側のバーで、ワークスペースの**アイコン**を選択します。 +2. ツール バーの [...] メニューで、**[ワークスペース設定]** を選択します。 +3. **[全般]** セクションで、**[このワークスペースの削除]** を選択します。 diff --git a/Instructions/Labs/14-create-a-star-schema-model.md b/Instructions/Labs/14-create-a-star-schema-model.md index 077bcec..0dce370 100644 --- a/Instructions/Labs/14-create-a-star-schema-model.md +++ b/Instructions/Labs/14-create-a-star-schema-model.md @@ -60,16 +60,23 @@ Fabric でデータを操作する前に、Fabric 試用版を有効にしてワ *注:Microsoft Fabric でウェアハウスまたは SQL の分析エンドポイントを作成するときに、既定のセマンティック モデルが自動的に作成され、親のレイクハウスまたはウェアハウスからビジネス ロジックを継承します。ここで行ったような、ご自身で作成するセマンティック モデルは、独自のニーズと好みに応じて設計および変更できるカスタム モデルです。カスタム セマンティック モデルを作成するには、Power BI Desktop、Power BI サービス、または Microsoft Fabric に接続するその他のツールを使用します。* 1. **リボンから [Open data model] (データ モデルを開く)** を選択します。 - + ここで、テーブル間のリレーションシップを作成します。 Power BI Desktop でのリレーションシップの作成に慣れている方にとっては、見覚えのある内容です。 *"スター スキーマの概念を確認しながら、モデル内のテーブルをファクト テーブルとディメンション テーブルに整理します。このモデルでは、**Trip** テーブルがファクト テーブルであり、ディメンションは **Date**、**Geography**、**Weather** です。"* -1. **DateID** 列を使用して、**Date** テーブルと **Trip** テーブルの間にリレーションシップを作成します。 **Date** テーブルの **DateID 列を選択**し、**Trip テーブルの DateID 列の上にドラッグ アンド ドロップ**します。 または、リボンから **[リレーションシップの管理]** を選択し、次に **[新しいリレーションシップ]** を選択します。 +1. **DateID** 列を使用して、**Date** テーブルと **Trip** テーブルの間にリレーションシップを作成します。 + + **Date** テーブルの **DateID 列を選択**し、*Trip テーブルの DateID 列の上にドラッグ アンド ドロップ*します。 + + リレーションシップが、**Date** テーブルから **Trip** テーブルへの **1 対多**のリレーションシップであることを確認します。 -1. リレーションシップが、**Date** テーブルから **Trip** テーブルへの **1 対多**のリレーションシップであることを確認します。 +1. 次のように、**Trip** ファクト テーブルに対してさらに 2 つのリレーションシップを作成します。 -1. 上記の手順を繰り返して、**Geography** および **Weather** ディメンションから **Trip** ファクト テーブルへのリレーションシップを作成します。 また、これらのリレーションシップが **1 対多** (ディメンション テーブルにはキーが 1 つ存在し、ファクト テーブルには多数存在する) であることも確認します。 + - **Geography [GeographyID]** から **Trip [DropoffGeographyID]]** (1 対多) + - **Weather [GeographyID]** から **Trip [DropoffGeographyID]** (1 対多) + + > **注**: 両方のリレーションシップについて、リレーションシップの既定のカーディナリティを **[1 対多]** に変更する必要があります。 1. テーブルをドラッグして、**Trip** ファクト テーブルが図の下部に配置され、残りのテーブル (ディメンション テーブル) がファクト テーブルの周囲に配置されるように位置を合わせます。 @@ -104,4 +111,3 @@ Fabric でデータを操作する前に、Fabric 試用版を有効にしてワ 1. 探索を保存したら、ワークスペースに戻り、データ ウェアハウス、既定のセマンティック モデル、作成したセマンティック モデル、ご自分の探索を確認します。 ![データ ウェアハウス、既定のセマンティック モデル、セマンティック モデル、データ探索が表示された Fabric のワークスペースのスクリーンショット。](./Images/semantic-model-workspace.png) - diff --git a/Instructions/Labs/Images/06d-secure-data-warehouse.md b/Instructions/Labs/Images/06d-secure-data-warehouse.md new file mode 100644 index 0000000..135e201 --- /dev/null +++ b/Instructions/Labs/Images/06d-secure-data-warehouse.md @@ -0,0 +1,273 @@ +--- +lab: + title: データ ウェアハウス内のデータをセキュリティで保護する + module: Get started with data warehouses in Microsoft Fabric +--- + +# データ ウェアハウス内のデータをセキュリティで保護する + +Microsoft Fabric のアクセス許可と詳細な SQL アクセス許可は連携して機能することで、ウェアハウスのアクセスとユーザーのアクセス許可を管理します。 この演習では、詳細なアクセス許可、列レベル セキュリティ、行レベル セキュリティ、動的データ マスクを使用してデータをセキュリティで保護します。 + +このラボは完了するまで、約 **45** 分かかります。 + +> **注**:この演習を完了するには、[Microsoft Fabric 試用版](https://learn.microsoft.com/fabric/get-started/fabric-trial)が必要です。 + +## ワークスペースの作成 + +Fabric でデータを操作する前に、Fabric 試用版を有効にしてワークスペースを作成してください。 + +1. [Microsoft Fabric ホーム ページ](https://app.fabric.microsoft.com)で、**Synapse Data Warehouse** を選択します。 +1. 左側のメニュー バーで、 **[ワークスペース]** を選択します (アイコンは 🗇 に似ています)。 +1. 任意の名前で新しいワークスペースを作成し、Fabric 容量を含むライセンス モード ("試用版"、*Premium*、または *Fabric*) を選択します。** +1. 開いた新しいワークスペースは空のはずです。 + + ![Fabric の空のワークスペースを示すスクリーンショット。](./Images/new-empty-workspace.png) + +## データ ウェアハウスの作成 + +次に、作成したばかりのワークスペース内にデータ ウェアハウスを作成します。 Synapse Data Warehouse のホーム ページには、新しいウェアハウスを作成するためのショートカットがあります。 + +1. **Synapse Data Warehouse** ホーム ページで、新しい**ウェアハウス**を任意の名前で作成します。 + + 1 分ほどで、新しいレイクハウスが作成されます。 + + ![新しいウェアハウスのスクリーンショット。](./Images/new-empty-data-warehouse.png) + +## テーブル内の列に動的データ マスクを適用する + +動的データ マスク ルールは、テーブル レベルで個々の列に適用されるため、すべてのクエリがマスクの影響を受けます。 機密データを閲覧する明示的なアクセス許可を持たないユーザーにはクエリ結果においてマスクされた値が表示され、データを閲覧する明示的なアクセス許可を持つユーザーには伏せられていない状態で値が表示されます。 マスクには、既定、メール、ランダム、カスタム文字列という 4 つの種類があります。 この演習では、既定のマスク、メール マスク、カスタム文字列マスクを適用します。 + +1. ウェアハウスで **[T-SQL]** タイルを選択し、既定の SQL コードを次の T-SQL ステートメントに置き換えてテーブルを作成し、データを挿入して表示します。 `CREATE TABLE` ステートメントで適用されるマスクは、以下の処理を行います。 + + ```sql + CREATE TABLE dbo.Customer + ( + CustomerID INT NOT NULL, + FirstName varchar(50) MASKED WITH (FUNCTION = 'partial(1,"XXXXXXX",0)') NULL, + LastName varchar(50) NOT NULL, + Phone varchar(20) MASKED WITH (FUNCTION = 'default()') NULL, + Email varchar(50) MASKED WITH (FUNCTION = 'email()') NULL + ); + GO + --Users restricted from seeing masked data will see the following when they query the table + --The FirstName column shows the first letter of the string with XXXXXXX and none of the last characters. + --The Phone column shows xxxx + --The Email column shows the first letter of the email address followed by XXX@XXX.com. + + INSERT dbo.Customer (CustomerID, FirstName, LastName, Phone, Email) VALUES + (29485,'Catherine','Abel','555-555-5555','catherine0@adventure-works.com'), + (29486,'Kim','Abercrombie','444-444-4444','kim2@adventure-works.com'), + (29489,'Frances','Adams','333-333-3333','frances0@adventure-works.com'); + GO + + SELECT * FROM dbo.Customer; + GO + ``` + +2. **[▷ 実行]** ボタンを使用して SQL スクリプトを実行します。これにより、データ ウェアハウスの **dbo** スキーマに **Customer** という名前の新しいテーブルが作成されます。 + +3. 次に、**[エクスプローラー]** ペインで **[スキーマ]** > **[dbo]** > **[テーブル]** の順に展開し、**Customer** テーブルが作成されていることを確認します。 あなたはマスクされていないデータを表示できるワークスペース管理者として接続されているため、SELECT ステートメントはマスクされていないデータを返します。 + +4. **閲覧者** ワークスペース ロールのメンバーであるテスト ユーザーとして接続し、次の T-SQL ステートメントを実行します。 + + ```sql + SELECT * FROM dbo.Customer; + GO + ``` + + このユーザーには UNMASK アクセス許可が付与されていないため、返されるデータの FirstName、Phone、Email 列はマスクされます。これらの列は `CREATE TABLE` ステートメント内でマスクを使用して定義されたためです。 + +5. ワークスペース管理者として再接続し、次の T-SQL を実行して、テスト ユーザーに対してデータのマスクを解除します。 + + ```sql + GRANT UNMASK ON dbo.Customer TO [testUser@testdomain.com]; + GO + ``` + +6. もう一度テスト ユーザーとして接続し、次の T-SQL ステートメントを実行します。 + + ```sql + SELECT * FROM dbo.Customer; + GO + ``` + + テスト ユーザーに `UNMASK` アクセス許可が付与されたため、データはマスクされていない状態で返されます。 + +## 行レベル セキュリティを適用する + +行レベル セキュリティ (RLS) を使用すると、ID またはクエリを実行するユーザーのロールに基づいて行へのアクセスを制限できます。 この演習では、セキュリティ ポリシーとインライン テーブル値関数として定義されたセキュリティ述語を作成して、行へのアクセスを制限します。 + +1. 前の演習で作成したウェアハウスで、**[新しい SQL クエリ]** ドロップダウンを選択します。 **[空白]** ヘッダーの下のドロップダウンで、**[新しい SQL クエリ]** を選択します。 + +2. テーブルを作成してデータを挿入します。 後の手順で行レベル セキュリティをテストできるように、'testuser1@mydomain.com' を自分の環境のユーザー名に、'testuser2@mydomain.com' を自分のユーザー名に置き換えます。 + ```sql + CREATE TABLE dbo.Sales + ( + OrderID INT, + SalesRep VARCHAR(60), + Product VARCHAR(10), + Quantity INT + ); + GO + + --Populate the table with 6 rows of data, showing 3 orders for each test user. + INSERT dbo.Sales (OrderID, SalesRep, Product, Quantity) VALUES + (1, 'testuser1@mydomain.com', 'Valve', 5), + (2, 'testuser1@mydomain.com', 'Wheel', 2), + (3, 'testuser1@mydomain.com', 'Valve', 4), + (4, 'testuser2@mydomain.com', 'Bracket', 2), + (5, 'testuser2@mydomain.com', 'Wheel', 5), + (6, 'testuser2@mydomain.com', 'Seat', 5); + GO + + SELECT * FROM dbo.Sales; + GO + ``` + +3. **[▷ 実行]** ボタンを使用して SQL スクリプトを実行します。これにより、データ ウェアハウスの **dbo** スキーマに **Sales** という名前の新しいテーブルが作成されます。 + +4. 次に、**[エクスプローラー]** ペインで **[スキーマ]** > **[dbo]** > **[テーブル]** の順に展開し、**Sales** テーブルが作成されていることを確認します。 +5. 新しいスキーマ、関数として定義されたセキュリティ述語、セキュリティ ポリシーを作成します。 + + ```sql + --Create a separate schema to hold the row-level security objects (the predicate function and the security policy) + CREATE SCHEMA rls; + GO + + --Create the security predicate defined as an inline table-valued function. A predicate evalutes to true (1) or false (0). This security predicate returns 1, meaning a row is accessible, when a row in the SalesRep column is the same as the user executing the query. + + --Create a function to evaluate which SalesRep is querying the table + CREATE FUNCTION rls.fn_securitypredicate(@SalesRep AS VARCHAR(60)) + RETURNS TABLE + WITH SCHEMABINDING + AS + RETURN SELECT 1 AS fn_securitypredicate_result + WHERE @SalesRep = USER_NAME(); + GO + + --Create a security policy to invoke and enforce the function each time a query is run on the Sales table. The security policy has a Filter predicate that silently filters the rows available to read operations (SELECT, UPDATE, and DELETE). + CREATE SECURITY POLICY SalesFilter + ADD FILTER PREDICATE rls.fn_securitypredicate(SalesRep) + ON dbo.Sales + WITH (STATE = ON); + GO +6. Use the **▷ Run** button to run the SQL script +7. Then, in the **Explorer** pane, expand **Schemas** > **rls** > **Functions**, and verify that the function has been created. +7. Confirm that you're logged as another user by running the following T-SQL. + + ```sql + SELECT USER_NAME(); + GO +5. Query the sales table to confirm that row-level security works as expected. You should only see data that meets the conditions in the security predicate defined for the user you're logged in as. + + ```sql + SELECT * FROM dbo.Sales; + GO + +## Implement column-level security + +Column-level security allows you to designate which users can access specific columns in a table. It is implemented by issuing a GRANT statement on a table specifying a list of columns and the user or role that can read them. To streamline access management, assign permissions to roles in lieu of individual users. In this exercise, you will create a table, grant access to a subset of columns on the table, and test that restricted columns are not viewable by a user other than yourself. + +1. In the warehouse you created in the earlier exercise, select the **New SQL Query** dropdown. Under the dropdown under the header **Blank**, select **New SQL Query**. + +2. Create a table and insert data into the table. + + ```sql + CREATE TABLE dbo.Orders + ( + OrderID INT, + CustomerID INT, + CreditCard VARCHAR(20) + ); + GO + + INSERT dbo.Orders (OrderID, CustomerID, CreditCard) VALUES + (1234, 5678, '111111111111111'), + (2341, 6785, '222222222222222'), + (3412, 7856, '333333333333333'); + GO + + SELECT * FROM dbo.Orders; + GO + ``` + +3. テーブル内の列を表示するためのアクセス許可を拒否します。 以下の Transact SQL は、'' が Orders テーブル内の CreditCard 列を表示することを防ぎます。 以下の `DENY` ステートメントで、testuser@mydomain.com をワークスペースに対する閲覧者アクセス許可を持つシステム内のユーザー名に置き換えます。 + + ```sql +DENY SELECT ON dbo.Orders (CreditCard) TO [testuser@mydomain.com]; + ``` + +4. SELECT アクセス許可を禁止したユーザーとして Fabric にログインすることで、列レベル セキュリティをテストします。 + +5. Orders テーブルに対してクエリを実行し、列レベル セキュリティが想定通りに機能していることを確認します。 次のクエリが返すのは OrderID 列と CustomerID 列だけであり、CrediteCard 列は返しません。 + + ```sql + SELECT * FROM dbo.Orders; + GO + + --You'll receive an error because access to the CreditCard column has been restricted. Try selecting only the OrderID and CustomerID fields and the query will succeed. + + SELECT OrderID, CustomerID from dbo.Orders + ``` + +## T-SQL を使用して SQL の詳細なアクセス許可を構成する + +Fabric ウェアハウスには、ワークスペース レベルおよびアイテム レベルでデータへのアクセスを制御できるアクセス許可モデルがあります。 Fabric ウェアハウスのセキュリティ保護可能なリソースに関してユーザーが何を実行できるかをより細かく制御する必要がある場合は、標準の SQL データ制御言語 (DCL) コマンドである `GRANT`、`DENY`、`REVOKE` を使用できます。 この演習では、オブジェクトを作成し、それらを `GRANT` と `DENY` を使用してセキュリティで保護し、その後クエリを実行して、詳細なアクセス許可の適用の効果を確認します。 + +1. 前の演習で作成したウェアハウスで、**[新しい SQL クエリ]** ドロップダウンを選択します。 **[空白]** ヘッダーで、**[新しい SQL クエリ]** を選択します。 + +2. ストアド プロシージャとテーブルを作成します。 + + ``` + CREATE PROCEDURE dbo.sp_PrintMessage + AS + PRINT 'Hello World.'; + GO + + CREATE TABLE dbo.Parts + ( + PartID INT, + PartName VARCHAR(25) + ); + GO + + INSERT dbo.Parts (PartID, PartName) VALUES + (1234, 'Wheel'), + (5678, 'Seat'); + GO + + --Execute the stored procedure and select from the table and note the results you get because you're a member of the Workspace Admin. Look for output from the stored procedure on the 'Messages' tab. + EXEC dbo.sp_PrintMessage; + GO + + SELECT * FROM dbo.Parts + GO + ``` + +3. 次にワークスペース閲覧者ロールのメンバーであるユーザーに対してテーブルに対するアクセス許可の `DENY SELECT` を実行し、同じユーザーに対してプロシージャに対する `GRANT EXECUTE` を実行します。 + + ```sql + DENY SELECT on dbo.Parts to [testuser@mydomain.com]; + GO + + GRANT EXECUTE on dbo.sp_PrintMessage to [testuser@mydomain.com]; + GO + + ``` + +4. [testuser@mydomain.com] の代わりに、上の DENY および GRANT ステートメントで指定したユーザーとして Fabric にログインします。 次に、ストアド プロシージャを実行し、テーブルに対してクエリを実行することで、先ほど適用した詳細なアクセス許可をテストします。 + + ```sql + EXEC dbo.sp_PrintMessage; + GO + + SELECT * FROM dbo.Parts + ``` + +## リソースをクリーンアップする + +この演習では、テーブル内の列に対して動的データ マスクを適用し、行レベル セキュリティを適用し、列レベル セキュリティを実装し、T-SQL を使用して SQL の詳細なアクセス許可を構成しました。 + +1. 左側のバーで、ワークスペースのアイコンを選択して、それに含まれるすべての項目を表示します。 +2. ツール バーの **[...]** メニューで、 **[ワークスペースの設定]** を選択してください。 +3. **[全般]** セクションで、**[このワークスペースの削除]** を選択します。 diff --git a/Instructions/Labs/Images/add-data-source-to-real-time-dashboard-large.png b/Instructions/Labs/Images/add-data-source-to-real-time-dashboard-large.png new file mode 100644 index 0000000..396eee1 Binary files /dev/null and b/Instructions/Labs/Images/add-data-source-to-real-time-dashboard-large.png differ diff --git a/Instructions/Labs/Images/add-data-source-to-real-time-dashboard.png b/Instructions/Labs/Images/add-data-source-to-real-time-dashboard.png new file mode 100644 index 0000000..4f1a013 Binary files /dev/null and b/Instructions/Labs/Images/add-data-source-to-real-time-dashboard.png differ diff --git a/Instructions/Labs/Images/add-lookup-query.png b/Instructions/Labs/Images/add-lookup-query.png new file mode 100644 index 0000000..ef4a4fe Binary files /dev/null and b/Instructions/Labs/Images/add-lookup-query.png differ diff --git a/Instructions/Labs/Images/add-new-parameter-large.png b/Instructions/Labs/Images/add-new-parameter-large.png new file mode 100644 index 0000000..d83ef24 Binary files /dev/null and b/Instructions/Labs/Images/add-new-parameter-large.png differ diff --git a/Instructions/Labs/Images/add-new-parameter.png b/Instructions/Labs/Images/add-new-parameter.png new file mode 100644 index 0000000..77d16aa Binary files /dev/null and b/Instructions/Labs/Images/add-new-parameter.png differ diff --git a/Instructions/Labs/Images/complete-parameter-settings-large.png b/Instructions/Labs/Images/complete-parameter-settings-large.png new file mode 100644 index 0000000..da6ab63 Binary files /dev/null and b/Instructions/Labs/Images/complete-parameter-settings-large.png differ diff --git a/Instructions/Labs/Images/complete-parameter-settings.png b/Instructions/Labs/Images/complete-parameter-settings.png new file mode 100644 index 0000000..38c400c Binary files /dev/null and b/Instructions/Labs/Images/complete-parameter-settings.png differ diff --git a/Instructions/Labs/Images/conected-now-create-datasource-large.png b/Instructions/Labs/Images/conected-now-create-datasource-large.png new file mode 100644 index 0000000..ba8218e Binary files /dev/null and b/Instructions/Labs/Images/conected-now-create-datasource-large.png differ diff --git a/Instructions/Labs/Images/conected-now-create-datasource.png b/Instructions/Labs/Images/conected-now-create-datasource.png new file mode 100644 index 0000000..63a51fb Binary files /dev/null and b/Instructions/Labs/Images/conected-now-create-datasource.png differ diff --git a/Instructions/Labs/Images/configure-parameter-large.png b/Instructions/Labs/Images/configure-parameter-large.png new file mode 100644 index 0000000..44f0a27 Binary files /dev/null and b/Instructions/Labs/Images/configure-parameter-large.png differ diff --git a/Instructions/Labs/Images/configure-parameter.png b/Instructions/Labs/Images/configure-parameter.png new file mode 100644 index 0000000..6fed6f8 Binary files /dev/null and b/Instructions/Labs/Images/configure-parameter.png differ diff --git a/Instructions/Labs/Images/copilot-queryset-results-large.png b/Instructions/Labs/Images/copilot-queryset-results-large.png new file mode 100644 index 0000000..4dde0b8 Binary files /dev/null and b/Instructions/Labs/Images/copilot-queryset-results-large.png differ diff --git a/Instructions/Labs/Images/copilot-queryset-results.png b/Instructions/Labs/Images/copilot-queryset-results.png new file mode 100644 index 0000000..cf1d067 Binary files /dev/null and b/Instructions/Labs/Images/copilot-queryset-results.png differ diff --git a/Instructions/Labs/Images/create-eventhouse.png b/Instructions/Labs/Images/create-eventhouse.png new file mode 100644 index 0000000..0752d1e Binary files /dev/null and b/Instructions/Labs/Images/create-eventhouse.png differ diff --git a/Instructions/Labs/Images/create-kql-database-eventhouse.png b/Instructions/Labs/Images/create-kql-database-eventhouse.png new file mode 100644 index 0000000..7fe1a0b Binary files /dev/null and b/Instructions/Labs/Images/create-kql-database-eventhouse.png differ diff --git a/Instructions/Labs/Images/create-real-time-dashboard.png b/Instructions/Labs/Images/create-real-time-dashboard.png new file mode 100644 index 0000000..9f3c01a Binary files /dev/null and b/Instructions/Labs/Images/create-real-time-dashboard.png differ diff --git a/Instructions/Labs/Images/create-visual-in-tiles-large.png b/Instructions/Labs/Images/create-visual-in-tiles-large.png new file mode 100644 index 0000000..ee1ac84 Binary files /dev/null and b/Instructions/Labs/Images/create-visual-in-tiles-large.png differ diff --git a/Instructions/Labs/Images/create-visual-in-tiles.png b/Instructions/Labs/Images/create-visual-in-tiles.png new file mode 100644 index 0000000..4daf28c Binary files /dev/null and b/Instructions/Labs/Images/create-visual-in-tiles.png differ diff --git a/Instructions/Labs/Images/data-source-options-real-time-dashboards.png b/Instructions/Labs/Images/data-source-options-real-time-dashboards.png new file mode 100644 index 0000000..9a50882 Binary files /dev/null and b/Instructions/Labs/Images/data-source-options-real-time-dashboards.png differ diff --git a/Instructions/Labs/Images/delete-flow-arrows-large.png b/Instructions/Labs/Images/delete-flow-arrows-large.png new file mode 100644 index 0000000..888a725 Binary files /dev/null and b/Instructions/Labs/Images/delete-flow-arrows-large.png differ diff --git a/Instructions/Labs/Images/delete-flow-arrows.png b/Instructions/Labs/Images/delete-flow-arrows.png new file mode 100644 index 0000000..6b3d00b Binary files /dev/null and b/Instructions/Labs/Images/delete-flow-arrows.png differ diff --git a/Instructions/Labs/Images/enable-and-configure-refresh-rate-large.png b/Instructions/Labs/Images/enable-and-configure-refresh-rate-large.png new file mode 100644 index 0000000..b5cac27 Binary files /dev/null and b/Instructions/Labs/Images/enable-and-configure-refresh-rate-large.png differ diff --git a/Instructions/Labs/Images/enable-and-configure-refresh-rate.png b/Instructions/Labs/Images/enable-and-configure-refresh-rate.png new file mode 100644 index 0000000..58ce7ad Binary files /dev/null and b/Instructions/Labs/Images/enable-and-configure-refresh-rate.png differ diff --git a/Instructions/Labs/Images/enable-auto-refresh-large.png b/Instructions/Labs/Images/enable-auto-refresh-large.png new file mode 100644 index 0000000..db2eaa7 Binary files /dev/null and b/Instructions/Labs/Images/enable-auto-refresh-large.png differ diff --git a/Instructions/Labs/Images/enable-auto-refresh.png b/Instructions/Labs/Images/enable-auto-refresh.png new file mode 100644 index 0000000..6dc01bf Binary files /dev/null and b/Instructions/Labs/Images/enable-auto-refresh.png differ diff --git a/Instructions/Labs/Images/enable-onelake-availability-large.png b/Instructions/Labs/Images/enable-onelake-availability-large.png new file mode 100644 index 0000000..f4c80e5 Binary files /dev/null and b/Instructions/Labs/Images/enable-onelake-availability-large.png differ diff --git a/Instructions/Labs/Images/enable-onelake-availability.png b/Instructions/Labs/Images/enable-onelake-availability.png index c478f99..f714749 100644 Binary files a/Instructions/Labs/Images/enable-onelake-availability.png and b/Instructions/Labs/Images/enable-onelake-availability.png differ diff --git a/Instructions/Labs/Images/enable-onelake-toggle.png b/Instructions/Labs/Images/enable-onelake-toggle.png index 90be1a1..4623dce 100644 Binary files a/Instructions/Labs/Images/enable-onelake-toggle.png and b/Instructions/Labs/Images/enable-onelake-toggle.png differ diff --git a/Instructions/Labs/Images/eventstream-add-aggregates-large.png b/Instructions/Labs/Images/eventstream-add-aggregates-large.png new file mode 100644 index 0000000..a486de0 Binary files /dev/null and b/Instructions/Labs/Images/eventstream-add-aggregates-large.png differ diff --git a/Instructions/Labs/Images/eventstream-add-aggregates.png b/Instructions/Labs/Images/eventstream-add-aggregates.png new file mode 100644 index 0000000..0b36f13 Binary files /dev/null and b/Instructions/Labs/Images/eventstream-add-aggregates.png differ diff --git a/Instructions/Labs/Images/eventstream-sample-data.png b/Instructions/Labs/Images/eventstream-sample-data.png new file mode 100644 index 0000000..ef073cc Binary files /dev/null and b/Instructions/Labs/Images/eventstream-sample-data.png differ diff --git a/Instructions/Labs/Images/eventstream-select-sample-data-large.png b/Instructions/Labs/Images/eventstream-select-sample-data-large.png new file mode 100644 index 0000000..22d366d Binary files /dev/null and b/Instructions/Labs/Images/eventstream-select-sample-data-large.png differ diff --git a/Instructions/Labs/Images/eventstream-select-sample-data.png b/Instructions/Labs/Images/eventstream-select-sample-data.png new file mode 100644 index 0000000..4d9dc30 Binary files /dev/null and b/Instructions/Labs/Images/eventstream-select-sample-data.png differ diff --git a/Instructions/Labs/Images/eventstream-workspace-large.png b/Instructions/Labs/Images/eventstream-workspace-large.png new file mode 100644 index 0000000..d84b4d9 Binary files /dev/null and b/Instructions/Labs/Images/eventstream-workspace-large.png differ diff --git a/Instructions/Labs/Images/eventstream-workspace.png b/Instructions/Labs/Images/eventstream-workspace.png new file mode 100644 index 0000000..b3002dd Binary files /dev/null and b/Instructions/Labs/Images/eventstream-workspace.png differ diff --git a/Instructions/Labs/Images/explore-data-fabric.png b/Instructions/Labs/Images/explore-data-fabric.png index c33ca92..0506df0 100644 Binary files a/Instructions/Labs/Images/explore-data-fabric.png and b/Instructions/Labs/Images/explore-data-fabric.png differ diff --git a/Instructions/Labs/Images/first-published-visual-large.png b/Instructions/Labs/Images/first-published-visual-large.png new file mode 100644 index 0000000..61f436d Binary files /dev/null and b/Instructions/Labs/Images/first-published-visual-large.png differ diff --git a/Instructions/Labs/Images/first-published-visual.png b/Instructions/Labs/Images/first-published-visual.png new file mode 100644 index 0000000..95b0ab0 Binary files /dev/null and b/Instructions/Labs/Images/first-published-visual.png differ diff --git a/Instructions/Labs/Images/group-by-drag-connectors-large.png b/Instructions/Labs/Images/group-by-drag-connectors-large.png new file mode 100644 index 0000000..0b558de Binary files /dev/null and b/Instructions/Labs/Images/group-by-drag-connectors-large.png differ diff --git a/Instructions/Labs/Images/group-by-drag-connectors.png b/Instructions/Labs/Images/group-by-drag-connectors.png new file mode 100644 index 0000000..d260b36 Binary files /dev/null and b/Instructions/Labs/Images/group-by-drag-connectors.png differ diff --git a/Instructions/Labs/Images/kql-database-event-processing-before-ingestion-large.png b/Instructions/Labs/Images/kql-database-event-processing-before-ingestion-large.png new file mode 100644 index 0000000..9153271 Binary files /dev/null and b/Instructions/Labs/Images/kql-database-event-processing-before-ingestion-large.png differ diff --git a/Instructions/Labs/Images/kql-database-event-processing-before-ingestion.png b/Instructions/Labs/Images/kql-database-event-processing-before-ingestion.png new file mode 100644 index 0000000..9716cde Binary files /dev/null and b/Instructions/Labs/Images/kql-database-event-processing-before-ingestion.png differ diff --git a/Instructions/Labs/Images/kql-query-results-15min-intervals.png b/Instructions/Labs/Images/kql-query-results-15min-intervals.png new file mode 100644 index 0000000..3ee1990 Binary files /dev/null and b/Instructions/Labs/Images/kql-query-results-15min-intervals.png differ diff --git a/Instructions/Labs/Images/kql-query-results.png b/Instructions/Labs/Images/kql-query-results.png index 029349a..ca8fcb5 100644 Binary files a/Instructions/Labs/Images/kql-query-results.png and b/Instructions/Labs/Images/kql-query-results.png differ diff --git a/Instructions/Labs/Images/kql-query-sample-large.png b/Instructions/Labs/Images/kql-query-sample-large.png new file mode 100644 index 0000000..c001ffa Binary files /dev/null and b/Instructions/Labs/Images/kql-query-sample-large.png differ diff --git a/Instructions/Labs/Images/kql-query-sample.png b/Instructions/Labs/Images/kql-query-sample.png index f1122b6..e8e8015 100644 Binary files a/Instructions/Labs/Images/kql-query-sample.png and b/Instructions/Labs/Images/kql-query-sample.png differ diff --git a/Instructions/Labs/Images/name-eventstream.png b/Instructions/Labs/Images/name-eventstream.png index 6a18a55..6fc2dc3 100644 Binary files a/Instructions/Labs/Images/name-eventstream.png and b/Instructions/Labs/Images/name-eventstream.png differ diff --git a/Instructions/Labs/Images/name-kqldatabase.png b/Instructions/Labs/Images/name-kqldatabase.png index 06a0ab0..df1db2f 100644 Binary files a/Instructions/Labs/Images/name-kqldatabase.png and b/Instructions/Labs/Images/name-kqldatabase.png differ diff --git a/Instructions/Labs/Images/navigate-to-data-large.png b/Instructions/Labs/Images/navigate-to-data-large.png new file mode 100644 index 0000000..9d018eb Binary files /dev/null and b/Instructions/Labs/Images/navigate-to-data-large.png differ diff --git a/Instructions/Labs/Images/navigate-to-data.png b/Instructions/Labs/Images/navigate-to-data.png new file mode 100644 index 0000000..60e1e69 Binary files /dev/null and b/Instructions/Labs/Images/navigate-to-data.png differ diff --git a/Instructions/Labs/Images/new-empty-data-warehouse.png b/Instructions/Labs/Images/new-empty-data-warehouse.png new file mode 100644 index 0000000..32042eb Binary files /dev/null and b/Instructions/Labs/Images/new-empty-data-warehouse.png differ diff --git a/Instructions/Labs/Images/new-empty-workspace.png b/Instructions/Labs/Images/new-empty-workspace.png new file mode 100644 index 0000000..150ebfe Binary files /dev/null and b/Instructions/Labs/Images/new-empty-workspace.png differ diff --git a/Instructions/Labs/Images/new-real-time-dashboard.png b/Instructions/Labs/Images/new-real-time-dashboard.png new file mode 100644 index 0000000..e74a683 Binary files /dev/null and b/Instructions/Labs/Images/new-real-time-dashboard.png differ diff --git a/Instructions/Labs/Images/open-copilot-in-queryset-large.png b/Instructions/Labs/Images/open-copilot-in-queryset-large.png new file mode 100644 index 0000000..62ad542 Binary files /dev/null and b/Instructions/Labs/Images/open-copilot-in-queryset-large.png differ diff --git a/Instructions/Labs/Images/open-copilot-in-queryset.png b/Instructions/Labs/Images/open-copilot-in-queryset.png new file mode 100644 index 0000000..b7a985b Binary files /dev/null and b/Instructions/Labs/Images/open-copilot-in-queryset.png differ diff --git a/Instructions/Labs/Images/real-time-dashboard-details-large.png b/Instructions/Labs/Images/real-time-dashboard-details-large.png new file mode 100644 index 0000000..5526963 Binary files /dev/null and b/Instructions/Labs/Images/real-time-dashboard-details-large.png differ diff --git a/Instructions/Labs/Images/real-time-dashboard-details.png b/Instructions/Labs/Images/real-time-dashboard-details.png new file mode 100644 index 0000000..46519eb Binary files /dev/null and b/Instructions/Labs/Images/real-time-dashboard-details.png differ diff --git a/Instructions/Labs/Images/real-time-intelligence-eventstream-sourced-large.png b/Instructions/Labs/Images/real-time-intelligence-eventstream-sourced-large.png new file mode 100644 index 0000000..cb84491 Binary files /dev/null and b/Instructions/Labs/Images/real-time-intelligence-eventstream-sourced-large.png differ diff --git a/Instructions/Labs/Images/real-time-intelligence-eventstream-sourced.png b/Instructions/Labs/Images/real-time-intelligence-eventstream-sourced.png new file mode 100644 index 0000000..4d1a691 Binary files /dev/null and b/Instructions/Labs/Images/real-time-intelligence-eventstream-sourced.png differ diff --git a/Instructions/Labs/Images/rename-page-add-tile-large.png b/Instructions/Labs/Images/rename-page-add-tile-large.png new file mode 100644 index 0000000..cd119bf Binary files /dev/null and b/Instructions/Labs/Images/rename-page-add-tile-large.png differ diff --git a/Instructions/Labs/Images/rename-page-add-tile.png b/Instructions/Labs/Images/rename-page-add-tile.png new file mode 100644 index 0000000..aaa5301 Binary files /dev/null and b/Instructions/Labs/Images/rename-page-add-tile.png differ diff --git a/Instructions/Labs/Images/save-as-queryset.png b/Instructions/Labs/Images/save-as-queryset.png new file mode 100644 index 0000000..5f791e6 Binary files /dev/null and b/Instructions/Labs/Images/save-as-queryset.png differ diff --git a/Instructions/Labs/Images/select-create-new-queryset.png b/Instructions/Labs/Images/select-create-new-queryset.png new file mode 100644 index 0000000..0759cab Binary files /dev/null and b/Instructions/Labs/Images/select-create-new-queryset.png differ diff --git a/Instructions/Labs/Images/select-eventstream.png b/Instructions/Labs/Images/select-eventstream.png index be5da24..072cf8c 100644 Binary files a/Instructions/Labs/Images/select-eventstream.png and b/Instructions/Labs/Images/select-eventstream.png differ diff --git a/Instructions/Labs/Images/select-kql-destination-large.png b/Instructions/Labs/Images/select-kql-destination-large.png new file mode 100644 index 0000000..502f4fe Binary files /dev/null and b/Instructions/Labs/Images/select-kql-destination-large.png differ diff --git a/Instructions/Labs/Images/select-kql-destination.png b/Instructions/Labs/Images/select-kql-destination.png new file mode 100644 index 0000000..976160f Binary files /dev/null and b/Instructions/Labs/Images/select-kql-destination.png differ diff --git a/Instructions/Labs/Images/select-onelake-data-hub-large.png b/Instructions/Labs/Images/select-onelake-data-hub-large.png new file mode 100644 index 0000000..80a95ca Binary files /dev/null and b/Instructions/Labs/Images/select-onelake-data-hub-large.png differ diff --git a/Instructions/Labs/Images/select-onelake-data-hub.png b/Instructions/Labs/Images/select-onelake-data-hub.png new file mode 100644 index 0000000..c384076 Binary files /dev/null and b/Instructions/Labs/Images/select-onelake-data-hub.png differ diff --git a/Instructions/Labs/Images/sql-query-results.png b/Instructions/Labs/Images/sql-query-results.png index 7a69604..39d29fb 100644 Binary files a/Instructions/Labs/Images/sql-query-results.png and b/Instructions/Labs/Images/sql-query-results.png differ diff --git a/Instructions/Labs/Images/sql-query-sample-large.png b/Instructions/Labs/Images/sql-query-sample-large.png new file mode 100644 index 0000000..b18833e Binary files /dev/null and b/Instructions/Labs/Images/sql-query-sample-large.png differ diff --git a/Instructions/Labs/Images/sql-query-sample.png b/Instructions/Labs/Images/sql-query-sample.png index 9479f93..181224d 100644 Binary files a/Instructions/Labs/Images/sql-query-sample.png and b/Instructions/Labs/Images/sql-query-sample.png differ diff --git a/Instructions/Labs/Images/star-schema-diagram.png b/Instructions/Labs/Images/star-schema-diagram.png index 880c64c..9035808 100644 Binary files a/Instructions/Labs/Images/star-schema-diagram.png and b/Instructions/Labs/Images/star-schema-diagram.png differ diff --git a/Instructions/Labs/Images/update-each-query-large.png b/Instructions/Labs/Images/update-each-query-large.png new file mode 100644 index 0000000..4febfe1 Binary files /dev/null and b/Instructions/Labs/Images/update-each-query-large.png differ diff --git a/Instructions/Labs/Images/update-each-query.png b/Instructions/Labs/Images/update-each-query.png new file mode 100644 index 0000000..7afda38 Binary files /dev/null and b/Instructions/Labs/Images/update-each-query.png differ diff --git a/Instructions/Labs/Images/write-query-for-tile-large.png b/Instructions/Labs/Images/write-query-for-tile-large.png new file mode 100644 index 0000000..ecb2376 Binary files /dev/null and b/Instructions/Labs/Images/write-query-for-tile-large.png differ diff --git a/Instructions/Labs/Images/write-query-for-tile.png b/Instructions/Labs/Images/write-query-for-tile.png new file mode 100644 index 0000000..bff1a0c Binary files /dev/null and b/Instructions/Labs/Images/write-query-for-tile.png differ