实时数据科学和 BI:Azure Synapse Analytics(第二部分:设置环境)





5.00/5 (2投票s)
本文中,我们准备了 Azure Cosmos DB 帐户,添加了示例零售销售数据,创建了 Azure Synapse 工作区,并链接了 Azure Synapse Studio。
在本系列的第一篇文章中,我们讨论了分析实时数据的优势,并提出了在不中断应用程序的情况下实现此目的的方法。在本文中,我们将开始动手演示 Azure Cosmos DB 的 Azure Synapse Link。我们将准备一个环境,稍后将用于展示 Azure Synapse Link 的混合事务和分析处理 (HTAP) 功能。
我们将创建一个 Azure Cosmos DB 帐户,然后向其中填充示例零售销售数据。之后,我们将启用 Azure Cosmos DB 的必要功能,创建一个 Azure Synapse 工作区,并访问 Azure Synapse Studio。在此过程中,我们将探索如何开发 Azure Cosmos DB 下支持 HTAP 的容器,以在 Azure Synapse Analytics(以前称为 SQL Data Warehouse)上实现实时数据科学和 BI。
设置 Azure Cosmos DB
使用 Azure 门户,我们首先在东美国 Azure 区域(或另一个首选区域)中创建资源组“rg-sales-info”以准备环境。然后,在此组下,我们使用核心 (SQL) API 创建 Azure Cosmos DB 实例。我们将帐户名称设置为“cdb-sales-info”,禁用全局分发并配置本地冗余备份存储。
下图描述了最终配置。请注意,在撰写本文时,Cosmos DB 的 Azure Synapse Link 仅适用于 SQL API 和 Azure Cosmos DB API for MongoDB。
创建 Azure Cosmos DB 帐户后,我们转到快速入门窗格。它包含最流行的编程工具(.NET、Xamarin、Java、Node.js 和 Python)的启动指南。如下图所示,我们选择Python,然后单击使用 Notebook 进行设置。
单击此项会将我们带到数据资源管理器窗格,我们可以在其中为 Azure 帐户启用 Notebook。然后,创建一个 Jupyter Notebook 以导入、分析和可视化数据。在此示例中,它是示例零售数据。
零售数据是一个 JSON 集合。每个项目包含十二个属性,例如 CartID、Price、UserName、Country、Latitude/Longitude 等。
默认情况下,快速启动包含来自引用教程的 Python 代码。因此,我们应该看到这样的屏幕:
上面的代码使用 azure.cosmos Python 包创建数据库 RetailDemo,然后创建容器 WebsiteData。
让我们创建一个新的 Notebook 并将数据导入到 SynapseDemo 数据库下的 SalesData 容器中。要创建 Notebook,我们从“我的 Notebooks”的上下文菜单中单击新建 Notebook。然后,我们将新 Notebook 重命名为 ImportSalesData.ipynb,并粘贴以下代码:
import azure.cosmos
import urllib.request, json
from azure.cosmos.partition_key import PartitionKey
db_name = 'SynapseDemo'
container_name = 'SalesData'
# Create database and container
database = cosmos_client.create_database_if_not_exists(db_name)
container = database.create_container_if_not_exists(
id=container_name,
partition_key=PartitionKey(path='/CartID'))
# Import data
data_count = 10
data_url = "https://cosmosnotebooksdata.blob.core.windows.net/notebookdata/websiteData.json"
with urllib.request.urlopen(data_url) as url:
data = json.loads(url.read().decode())
for event in data[:data_count]:
try:
container.upsert_item(body=event)
except errors.CosmosHttpResponseError as e:
raise
# Query and print data
query = 'SELECT c.id, c.Price FROM c'
result = list(container.query_items(query, enable_cross_partition_query=True))
for r in result:
print("Id: {}, Price: {:.2f}".format(r['id'], r['Price']))
创建数据库和容器后,我们从 URL 获取数据并将前十个项目插入到容器中。代码的最后一部分查询 Azure Cosmos DB 容器数据并将其打印到控制台。具体来说,我们只选择两个属性:id 和 price。然后,我们将它们打印到控制台。
在数据资源管理器中运行上述 Notebook 后,我们应该看到以下结果:
创建 Synapse 工作区
现在数据已准备就绪,我们可以创建 Synapse 工作区并将其链接到 Azure Cosmos DB。要创建工作区,请按照 Microsoft 的教程进行操作。在 Azure 门户中,我们转到 Azure Synapse Analytics 并单击创建 Synapse 工作区按钮。它会打开典型的 Azure 表单,我们在其中提供以下内容:
- 资源组:在这里,我们使用 rg-sales-info。
- 工作区名称:我们将其设置为 sales-workspace。
- 区域:我们使用美国东部。
- Data Lake Storage Gen 2:我们选择从订阅单选按钮,并创建新帐户和文件系统。我们将它们的名称设置为“dlssalesinfo”。
此图像总结了我们的配置:
创建工作区后,我们准备通过Azure Cosmos DB 的 Azure Synapse Link将其链接到 Azure Cosmos DB。我们有几个选项可以启用 Azure Synapse Link。
如果切换回 Azure Cosmos DB 帐户下的数据资源管理器,我们单击SynapseDemo 数据库。单击此项会更改顶行中的操作窗格。现在有几个按钮,包括启用 Azure Synapse Link按钮。单击它后,我们在出现的对话框中确认操作:
我们还可以使用 Azure 门户或 Azure Cloud Shell(或本地安装的 Azure CLI)来启用 Azure Synapse Link。使用门户时,我们转到 Azure Cosmos DB 帐户(这里我们使用 cdb-sales-info),在左侧选择功能,然后将Azure Synapse Link从关闭切换到开启:
如果使用命令行界面 (CLI),我们键入:
az cosmosdb update -g rg-sales-info -n cdb-sales-info --enable-analytical-storage true
此命令启用分析存储和 Synapse Link。下图显示了示例用法和命令输出:
在本教程中,我们在 Azure Cloud Shell 中调用上述命令。
配置 Synapse Studio
所有构建块都已准备就绪。我们可以继续在 Synapse Studio 中配置它们。要打开 Synapse Studio,我们返回到 Synapse 工作区,然后单击“入门”部分中的打开 Synapse Studio:
或者,我们可以使用专用的工作区 Web URL 访问 Synapse Studio,该 URL 显示在“概述”中。此选项在实践中对于更快地访问很有用。
请注意,Synapse Studio 启动需要一段时间。之后,我们应该看到一个欢迎屏幕,如下所示:
现在,我们需要将 Azure Cosmos DB 帐户 (cdb-sales-info) 与 Synapse 工作区链接。为此,在 Synapse 工作区中,我们单击数据选项卡(左侧的第二个图标)。然后,我们单击+图标并选择连接到外部数据:
Synapse 在右侧窗格中显示另一个表单,我们在其中选择Azure Cosmos DB (SQL API):
然后,我们通过提供三个值来配置链接:
- 链接服务的名称。在这里,我们使用 CosmosDb_Sales_Info。
- Azure Cosmos DB 服务。在这里,它是 cdb-sales-info。
- 数据库名称。我们使用 SynapseDemo(这必须与 Notebook 中的 Python 脚本名称匹配)。
此时,我们可以单击测试连接链接以检查一切是否正常。我们的配置屏幕截图如下:
创建此链接后,我们最终需要刷新 Synapse Studio。为此,我们使用 Synapse Studio 右上角的专用图标。然后,链接的数据库以及我们的 SalesData 容器将显示在链接选项卡中:
Synapse Link 通过 Microsoft 文档中描述的相应图标区分仅 OLTP 和启用 HTAP 的 Azure Cosmos DB 容器。在上面的屏幕截图中,我们的 SalesData 容器是仅 OLTP 的。
我们现在将创建另一个启用 HTAP 的容器,SalesDataHTAP
。为此,让我们通过将container_name
更改为“SalesDataHTAP”来修改ImportSalesData.ipynb
Notebook。
我们还将analytical_storage_ttl
参数添加到create_container_if_not_exists
方法中:
container_name = 'SalesDataHTAP'
# Create database and container
database = cosmos_client.create_database_if_not_exists(db_name)
container = database.create_container_if_not_exists(id=container_name,
partition_key=PartitionKey(path='/CartID'),
analytical_storage_ttl=-1)
analytical_storage_ttl
参数控制分析存储。更具体地说,它确定了数据在分析存储中的生存时间(分析 TTL),并且可以取以下三个值之一:
- 0 或 Null:禁用分析存储
- -1:指定数据将无限期存储
- 另一个数字:指定以秒为单位的实际 TTL
在上面的代码中,我们使用 -1,它将 TTL 设置为无限。运行修改后的 Notebook 并刷新 Synapse Studio 后,我们应该看到两个容器(注意不同的图标):
正如我们稍后将看到的,容器因我们可以在其上执行的操作而异。
请注意,如果运行修改后的代码时出现错误,请确保已通过 Azure CLI 启用了分析存储。
摘要
在本文中,我们准备了 Azure Cosmos DB 环境,它模拟了云原生解决方案的典型操作数据库。我们配置了数据库,以便可以将其与 Azure Synapse 链接,从而在不影响操作数据库性能的情况下进一步进行数据科学。
我们现在可以通过例如通过 Power BI 设置操作报告,或者为机器学习准备或聚合数据来扩展此功能。在本系列的第三篇文章中,我们将探讨如何在 Power BI 图表中显示数据。
此外,您可以通过参加 Microsoft 的Azure Synapse Analytics 动手培训系列来了解更多关于如何推动商业智能和机器学习的信息。每集都由 Azure Synapse 工程团队的成员主讲,提供动手实践的 Azure Synapse 培训。