共用方式為


使用追蹤資料庫

下列資料庫功能可讓您將位於不同叢集中的資料庫附加至 Azure Data Explorer 叢集。 追蹤程式資料庫會以唯讀模式附加,讓您能夠檢視資料,並在內嵌至領導者資料庫的資料上執行查詢。 下列資料庫會同步處理領導者資料庫中的變更。 由於同步處理,資料可用性會有幾秒鐘到幾分鐘的資料延遲。 時間延遲的長度取決於領導者資料庫中繼資料的整體大小。 領導者和追蹤者資料庫使用相同的儲存體帳戶來擷取資料。 儲存體是由領導者資料庫所擁有。 追蹤者資料庫會檢視資料,而不需要內嵌資料。 由於附加資料庫是唯讀資料庫,因此除了 快取原則、 主體許可權之外,無法修改資料庫中的資料、資料表和原則。 無法刪除附加的資料庫。 他們必須由領導者或追蹤者卸離,然後才能刪除。

使用追蹤程式功能將資料庫附加至不同的叢集,會作為基礎結構,在組織與小組之間共用資料。 此功能有助於隔離計算資源,以保護生產環境免于非生產使用案例。 追蹤程式也可用來將 Azure Data Explorer 叢集的成本與對資料執行查詢的合作物件產生關聯。

追蹤哪些資料庫?

  • 叢集可以遵循一個資料庫、數個資料庫或領導者叢集的所有資料庫。
  • 單一叢集可以遵循來自多個領導者叢集的資料庫。
  • 叢集可以同時包含追蹤者資料庫和領導者資料庫。
  • EngineV3 叢集只能遵循 EngineV3 叢集,同樣地,EngineV2 叢集只能遵循 V2 叢集。

必要條件

  • Azure 訂用帳戶。 建立 Azure 免費帳戶
  • 適用于領導者和追蹤者的 Azure Data Explorer 叢集和資料庫。 建立叢集和資料庫
  • 領導者資料庫應該包含資料。 您可以使用擷取概觀中所討論的其中一種方法來擷取資料

附加資料庫

您可以使用各種方法來附加資料庫。 在本文中,我們會討論如何使用 C#、Python、PowerShell 或 Azure Resource Manager 範本來附加資料庫。 若要附加資料庫,您必須擁有使用者、群組、服務主體或受控識別,且在領導者叢集和追蹤者叢集上至少具有參與者角色。 使用Azure 入口網站PowerShellAzure CLIARM 範本新增或移除角色指派。 深入瞭解 Azure 角色型存取控制 (Azure RBAC) 不同的角色

資料表層級共用

附加資料庫時,也會遵循外部資料表和具體化檢視表。 您可以藉由設定 'TableLevelSharingProperties' 來共用特定的資料表/外部資料表/具體化檢視。

'TableLevelSharingProperties' 包含八個字串陣列: tablesToIncludetablesToExclude 、、 externalTablesToIncludematerializedViewsToExcludefunctionsToIncludeexternalTablesToExcludematerializedViewsToInclude 和 。 functionsToExclude 所有陣列中的專案數目上限為 100。

注意

使用 '*' 所有資料庫標記法時,不支援資料表層級共用。

注意

包含具體化檢視時,也會包含其來源資料表。

範例

  1. 包含所有資料表。 不需要 '*',因為所有資料表預設都會跟著:

    tablesToInclude = []
    
  2. 包含名稱開頭為 「Logs」 的所有資料表:

    tablesToInclude = ["Logs*"]
    
  3. 排除所有外部資料表:

    externalTablesToExclude = ["*"]
    
  4. 排除所有具體化檢視:

    materializedViewsToExclude=["*"]
    

資料庫名稱覆寫

您可以選擇性地讓追蹤者叢集中的資料庫名稱與領導者叢集不同。 例如,您可能想要將多個領導者叢集的相同資料庫名稱附加至追蹤者叢集。 若要指定不同的資料庫名稱,請設定 'DatabaseNameOverride' 或 'DatabaseNamePrefix' 屬性。

使用 C 附加資料庫#

必要的 NuGet 套件

C# 範例

var tenantId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Directory (tenant) ID
var clientId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Application ID
var clientSecret = "PlaceholderClientSecret"; //Client Secret
var followerSubscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var credentials = await ApplicationTokenProvider.LoginSilentAsync(tenantId, clientId, clientSecret);
var resourceManagementClient = new KustoManagementClient(credentials) { SubscriptionId = followerSubscriptionId };
var followerResourceGroupName = "followerResourceGroup";
var followerClusterName = "follower";
var attachedDatabaseConfigurationName = "attachedDatabaseConfiguration"
var leaderSubscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var leaderResourceGroup = "leaderResourceGroup";
var leaderClusterName = "leader";
var attachedDatabaseConfigurationData = new AttachedDatabaseConfiguration
{
    ClusterResourceId = $"/subscriptions/{leaderSubscriptionId}/resourceGroups/{leaderResourceGroup}/providers/Microsoft.Kusto/Clusters/{leaderClusterName}",
    DatabaseName = "<databaseName>", // Can be specific database name or * for all databases
    DefaultPrincipalsModificationKind = "Union",
    Location = "North Central US"
};
// Table level sharing properties are not supported when using '*' all databases notation.
if (attachedDatabaseConfigurationData.DatabaseName != "*")
{
    // Set up the table level sharing properties - the following is just an example.
    attachedDatabaseConfigurationData.TableLevelSharingProperties = new TableLevelSharingProperties(
        tablesToInclude:new List<string> { "table1" },
        tablesToExclude:new List<string> { "table2" },
        externalTablesToInclude:new List<string> { "exTable1" },
        externalTablesToExclude:new List<string> { "exTable2" },
        materializedViewsToInclude:new List<string> { "matTable1" },
        materializedViewsToExclude:new List<string> { "matTable2" }
    );
}
await resourceManagementClient.AttachedDatabaseConfigurations.CreateOrUpdateAsync(
    followerResourceGroupName, followerClusterName, attachedDatabaseConfigurationName, attachedDatabaseConfigurationData
);

確認資料庫已成功附加

若要確認資料庫已成功附加,請在Azure 入口網站中找到附加的資料庫。 您可以確認資料庫已成功附加在 追蹤者領導者 叢集中。

檢查您的追蹤者叢集

  1. 流覽至追蹤叢集,然後選取 [ 資料庫]。

  2. 在資料庫清單中,搜尋新的唯讀資料庫。

    入口網站中唯讀追蹤資料庫的螢幕擷取畫面。

    您也可以在資料庫概觀頁面中檢視此清單:

    [資料庫概觀] 頁面的螢幕擷取畫面,其中包含追蹤程式叢集清單。

檢查您的領導者叢集

  1. 流覽至領導者叢集,然後選取 [ 資料庫]

  2. 檢查相關資料庫是否標示為[與其他人> 共用]

  3. 切換關聯性連結以檢視詳細資料。

    與其他人共用的資料庫螢幕擷取畫面,以檢查領導者叢集。

    您也可以在資料庫概觀頁面中檢視此專案:

    概觀的螢幕擷取畫面,其中包含與其他人共用的資料庫清單。

中斷連結追蹤資料庫

注意

若要從追蹤者或領導者端卸離資料庫,您必須擁有使用者、群組、服務主體或受控識別,且叢集上至少具有您要卸離資料庫的參與者角色。 在下列範例中,我們使用服務主體。

使用 C#** 從追蹤程式叢集卸離附加的追蹤程式資料庫

追蹤程式叢集可以卸離任何附加的追蹤程式資料庫,如下所示:

var tenantId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Directory (tenant) ID
var clientId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Application ID
var clientSecret = "PlaceholderClientSecret"; //Client Secret
var followerSubscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var credentials = await ApplicationTokenProvider.LoginSilentAsync(tenantId, clientId, clientSecret);
var resourceManagementClient = new KustoManagementClient(credentials) { SubscriptionId = followerSubscriptionId };
var followerResourceGroupName = "testrg";
//The cluster and database attached database configuration are created as part of the prerequisites
var followerClusterName = "follower";
var attachedDatabaseConfigurationsName = "attachedDatabaseConfiguration";
await resourceManagementClient.AttachedDatabaseConfigurations.DeleteAsync(
    followerResourceGroupName, followerClusterName, attachedDatabaseConfigurationsName
);

使用 C 從領導者叢集卸離附加的追蹤者資料庫#

領導者叢集可以卸離任何連結的資料庫,如下所示:

var tenantId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Directory (tenant) ID
var clientId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Application ID
var clientSecret = "PlaceholderClientSecret"; //Client Secret
var leaderSubscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var credentials = await ApplicationTokenProvider.LoginSilentAsync(tenantId, clientId, clientSecret);
var resourceManagementClient = new KustoManagementClient(credentials) { SubscriptionId = leaderSubscriptionId };
var leaderResourceGroupName = "testrg";
var leaderClusterName = "leader";
var followerSubscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var followerResourceGroupName = "followerResourceGroup";
//The cluster and attached database configuration that are created as part of the Prerequisites
var followerClusterName = "follower";
var attachedDatabaseConfigurationsName = "attachedDatabaseConfiguration";
var followerDatabaseDefinition = new FollowerDatabaseDefinition
{
    ClusterResourceId = $"/subscriptions/{followerSubscriptionId}/resourceGroups/{followerResourceGroupName}/providers/Microsoft.Kusto/Clusters/{followerClusterName}",
    AttachedDatabaseConfigurationName = attachedDatabaseConfigurationsName
};
await resourceManagementClient.Clusters.DetachFollowerDatabasesAsync(
    leaderResourceGroupName, leaderClusterName, followerDatabaseDefinition
);

管理主體、許可權和快取原則

管理主體

附加資料庫時,請指定 「預設主體修改種類」。 預設值是將覆寫授權主體與授權主體的領導者資料庫集合結合

種類 說明
Union 附加的資料庫主體一律會包含原始資料庫主體,以及新增至追蹤資料庫的其他新主體。
Replace 從原始資料庫不繼承主體。 必須為附加的資料庫建立新的主體。
附加的資料庫主體只包含沒有其他主體的原始資料庫主體。

如需使用控制項命令來設定授權主體的詳細資訊,請參閱 控制命令來管理追蹤者叢集

管理權限

管理唯讀資料庫許可權與所有資料庫類型的許可權相同。 請參閱管理Azure 入口網站的許可權

設定快取原則

下列程式資料庫管理員可以修改附加資料庫的 快取原則 ,或裝載叢集上任何資料表的快取原則。 預設值是將領導者叢集資料庫和資料表層級快取原則中的源資料庫與資料庫和資料表層級覆寫原則中定義的原則結合在一起。 例如,您可以在領導者資料庫上擁有 30 天的快取原則,以執行每月報告,以及追蹤者資料庫的三天快取原則,只查詢最近的資料以進行疑難排解。 如需使用控制項命令在追蹤資料庫或資料表上設定快取原則的詳細資訊,請參閱 控制命令來管理追蹤者叢集

備註

  • 如果領導者/追蹤者叢集的資料庫之間發生衝突,當所有資料庫後面接著追蹤者叢集時,就會依照下列方式加以解決:
    • 在追蹤者叢集上建立名為 DB 的資料庫優先于在領導者叢集上建立的相同名稱的資料庫。 這就是為什麼必須移除或重新命名追蹤叢集中的資料庫 DB ,讓追蹤者叢集包含領導者的資料庫 DB
    • 從兩個或多個領導者叢 集後面接著 的資料庫,會任意從 其中一個 領導者叢集中選擇,且不會再追蹤一次。
  • 在追蹤者叢集上顯示 叢集活動記錄和歷程記錄 執行的命令會在追蹤者叢集上顯示活動和歷程記錄,而且其結果集不會包含領導者叢集或叢集的結果。
    • 例如: .show queries 在追蹤者叢集上執行的命令只會顯示在資料庫上執行的查詢,後面接著後續的叢集,而不會針對領導者叢集中的相同資料庫執行查詢。

限制

  • 追蹤者和領導者叢集必須位於相同的區域中。
  • 如果在追蹤的資料庫上使用 串流擷取 ,則應該啟用追蹤叢集以進行串流擷取,以允許追蹤串流擷取資料。
  • 領導者和追蹤者叢集不支援使用 客戶自控金鑰 的資料加密。
  • 在中斷連結之前,您無法刪除附加至不同叢集的資料庫。
  • 在中斷連結之前,您無法刪除已連結至不同叢集之資料庫的叢集。
  • 當追蹤所有資料庫時,不支援資料表層級共用屬性。

下一步