使用 Azure Synapse Analytics 進行空間資料分析

Azure Synapse Analytics
Azure AI 服務
Azure 電腦視覺
Azure Batch
Azure 儲存體

此架構的設計目的是要示範端對端實作,其中包含搭配使用地理空間程式庫和 AI 模型搭配Azure Synapse Analytics來擷取、載入、轉換和分析空間資料。 本文也會示範如何整合地理空間特定的Azure 認知服務模型、來自合作夥伴的 AI 模型、自備資料,以及使用 Azure Synapse Analytics 的 AI 模型。 本檔的目標物件是使用地理空間或空間資料時具有中繼技能等級的使用者。

此架構的實作可於 GitHub 取得。

Apache®、Apache Spark、Spark、Spark 標誌、Apache Sedona、Apache 程式碼、Apache Feather 標誌和 Apache 檔案專案標誌是美國和/或其他國家/地區的 Apache Software Foundation 注冊商標或商標。 使用這些標記不會隱含 Apache Software Foundation 的背書。

架構

顯示地理空間處理分析解決方案的圖表。

下載這個架構的 Visio 檔案

資料流程

下列各節說明架構中的階段。

資料擷取

空間資料會透過) 和MaxarAirbusNAIP/USDA (等資料來源提取。 資料會擷取到Azure Data Lake Storage

Azure Synapse分析提供各種管線和活動,例如 Web 活動、資料流程活動和自訂活動,以連線到這些來源,並將資料複製到Data Lake Storage。

Azure Synapse自訂活動會在虛擬機器的Azure Batch集區或Docker 相容容器中執行自訂的程式碼邏輯。

資料轉換

資料會處理並轉換成分析師和 AI 模型可取用的格式。 地理空間程式庫,包括 GDAL、OGR、Rasterio 和 GeoPandas,可用來執行轉換。

Azure Synapse Spark 集區可讓您設定和使用這些程式庫來執行資料轉換。 您也可以使用Azure Synapse使用Azure Batch集區的自訂活動。

Azure Synapse筆記本是一種 Web 介面,可用來建立包含即時程式碼、視覺效果和敘述文字的檔案。 筆記本是驗證想法、定義轉換,以及執行快速實驗以從您的資料取得見解並建置管線的絕佳位置。 在範例程式碼中,GDAL 程式庫會在 Spark 集區中使用來執行資料轉換。 如需詳細資訊,請參閱本文的 範例程式碼 一節。

此範例解決方案會從此資料轉換步驟實作此管線。 此範例是以假設資料由稍早所述的資料擷取方法來複製Data Lake Storage。 它示範此管線的實作,以進行點陣資料處理。

AI 模型的分析和執行

Azure Synapse筆記本環境會分析並執行 AI 模型。

使用認知服務自訂視覺模型、在自己的環境中定型,以及封裝為 Docker 容器的服務所開發的 AI 模型可在Azure Synapse環境中使用。

在Azure Synapse環境中,您也可以執行合作夥伴提供的 AI 模型,以取得各種功能,例如物件偵測、變更偵測和陸地分類。 這些模型會在自己的環境中定型,並封裝為 Docker 容器。

Azure Synapse可以透過在 Batch 集區中以可執行檔或 Docker 容器的形式執行程式碼的自訂活動來執行這類 AI 模型。 此範例解決方案示範如何在特定地理空間區域中執行自訂視覺 AI 模型作為Azure Synapse管線的一部分,以偵測物件。

分析後和視覺效果

  • 為了進一步分析和視覺效果,AI 模型的分析和執行輸出可以儲存在Data Lake Storage、資料感知資料庫,例如 適用於 PostgreSQL 的 Azure 資料庫 或 Azure Cosmos DB。 此範例解決方案示範如何轉換 AI 模型輸出,並將其儲存為geoJSON資料,以Data Lake Storage和適用於 PostgreSQL 的 Azure 資料庫。 您可以從該處擷取和查詢輸出。
  • 針對視覺效果:
    • 您可以使用 ArcGIS Desktop 之類的授權工具,或 QGIS 之類的開放原始碼工具。
    • 您可以使用 Power BI 從各種資料來源存取 GeoJSON,並將地理資訊系統視覺化 () 資料。
    • 您可以使用用戶端地理空間 JavaScript 程式庫,將 Web 應用程式中的資料視覺化。

單元

資料來源

資料擷取

  • Azure Synapse Analytics是一項無限制的分析服務,可將資料整合、企業資料倉儲和巨量資料分析結合在一起。 Azure Synapse包含與Azure Data Factory相同的資料整合引擎和體驗,因此您可以在不離開Azure Synapse的情況下建立大規模 ETL 管線。
  • Azure Data Lake Storage 是內建於 Azure Blob 儲存體的巨量資料專屬功能。
  • Azure Batch可讓您在 Azure 上執行和調整大量批次運算作業。 Batch 工作可以直接在 Batch 集區中的虛擬機器上執行 (節點) ,但您也可以設定 Batch 集區,在節點上的 Docker 相容容器 中執行工作。
    • Azure Synapse自訂活動會在虛擬機器或 Docker 容器的Azure Batch集區上執行自訂程式碼邏輯。
  • Azure 金鑰保存庫會儲存及控制權杖、密碼和 API 金鑰等秘密的存取。 Key Vault 也會建立並控制加密金鑰並管理安全性憑證。

資料轉換

下列地理空間程式庫和套件會一起用於轉換。 這些程式庫和套件會安裝在無伺服器 Spark 集區中,然後附加至Azure Synapse筆記本。 如需安裝程式庫的資訊,請參閱本文稍後的在Azure Synapse Spark 集區中安裝地理空間套件

  • 地理空間程式庫
    • GDAL 是用來操作衛星資料的工具庫。 GDAL 適用於點陣和向量資料類型。 非常適合用來了解您是否正在使用衛星資料。
    • Rasterio 是用於點陣處理的模組。 您可以將其用於在 Python 中讀取和寫入數種不同的點陣格式。 Rasterio 是以 GDAL 為基礎。 匯入模組時,Python 會自動註冊所有已知的 GDAL 驅動程式來讀取支援的格式。
    • GeoPandas 是一個開放原始碼專案,可讓您更輕鬆地在 Python 中使用空間資料。 GeoPandas 會擴充 Pandas 所使用的資料類型,以允許幾何類型的空間作業。
    • Shapely 是一種 Python 套件,用於設定定理分析和操作平面功能。 Shapely 會 (透過 Python 的 ctypes 模組) 使用廣泛部署 GEOS 程式庫中的函式。
    • pyproj 會執行製圖轉換。 並使用 PROJ,從經度和緯度轉換成原生地圖投影 x、y 座標,反之亦然。
  • Azure Batch可讓您在 Azure 上執行和調整大量批次運算作業。
  • Azure Synapse筆記本是一種 Web 介面,可用來建立包含即時程式碼、視覺效果和敘述文字的檔案。 您可以使用 Notebook 活動,將現有的Azure Synapse筆記本新增至Azure Synapse管線。
  • Apache Spark 集 區可讓您設定和使用程式庫來執行資料轉換。 您可以使用 Spark 作業定義活動,將現有的 Spark 作業新增至Azure Synapse管線。

分析和 AI 模型化

  • Azure Synapse提供機器學習功能。
  • Azure Batch可讓您在 Azure 上執行和調整大量批次運算作業。 在此解決方案中,Azure Synapse自訂活動是用來在Azure Batch集區上執行 Docker 型 AI 模型。
  • Azure 認知服務 可讓您將視覺內嵌至您的應用程式。 您可以使用認知服務的元件自訂視覺,針對特定領域自訂和內嵌最先進的電腦視覺影像分析。
  • 您也可以使用自備 AI 模型和 Microsoft 合作夥伴 AI 模型 ,例如 blackshark.ai

分析後和視覺效果連結

  • 適用於 PostgreSQL 的 Azure 資料庫是專為超大規模資料庫工作負載設計的完全受控關係資料庫服務。 它透過 PostGIS 延伸模組支援空間資料。
  • Azure Cosmos DB 支援 針對 GeoJSON中代表的地理空間點資料編制索引和查詢。
  • Power BI 是用來建置報表和儀表板的互動式資料視覺效果工具。 您可以從 Esri ArcGIS Maps取得空間空間資料的深入解析。
  • QGIS 是免費的開放原始碼之一,可供建立、編輯、視覺化、分析及發佈地理空間資訊。
  • ArcGIS Desktop 是 Esri 提供的授權產品。 您可以使用它來建立、分析、管理及共用地理資訊。

替代方案

如果您想要執行可從Azure Synapse呼叫的容器化 AI 模型,您可以使用Azure Kubernetes ServiceAzure 容器執行個體Azure Container Apps

Azure Databricks 提供裝載分析管線的替代方案。

Azure HDInsight 中的 Spark 提供在 Apache Spark 環境中使用地理空間程式庫的替代方案。

以下是一些可用於空間資料處理的替代程式庫和架構:

  • 先前稱為 GeoSpark 的Apache Sedona是用於處理大規模空間資料的叢集運算系統。 Sedona 使用現用的空間復原分散式資料集和 SpatialSQL 擴充 Spark 和 Spark SQL,以有效率地跨機器載入、處理和分析大規模的空間資料。
  • 適用于 Python 的 Dask 是可調整現有 Python 生態系統的平行運算程式庫。

實例詳細資料

空間資料收集越來越常見。 為了應用人工智慧,機器學習需要儲存的資料封存。 建置雲端式解決方案以進行太空分析的需求變得更重要,可讓企業和政府推動更明智的商務和策略性決策。

潛在使用案例

此解決方案適用于航太和飛機產業。 它會解決下列案例:

  • 點陣資料擷取和處理
  • 透過預先定型的 AI 模型進行物件偵測
  • 透過 AI 模型的陸地分類
  • 透過 AI 模型監視環境中的變更
  • 來自預處理映射集的衍生資料集
  • 向量視覺效果/社區域耗用量
  • 向量資料篩選和跨資料聯結

考量事項

這些考慮會實作 Azure Well-Architected Framework 的要素,這是一組可用來改善工作負載品質的指引原則。 如需詳細資訊,請參閱 Microsoft Azure Well-Architected Framework

卓越營運

如果您使用 Git 進行原始檔控制共同作業,您可以使用Synapse Studio將工作區與 Git 存放庫、Azure DevOps 或 GitHub 建立關聯。 如需詳細資訊,請參閱 Synapse Studio 中的原始檔控制

  • 在Azure Synapse工作區中,CI/CD 會將所有實體從一個環境 (開發、測試、生產) 移至另一個環境。
  • 您可以使用 Azure DevOps 發行管線和GitHub Actions,將Azure Synapse工作區部署自動化至多個環境。

效能

  • Azure Synapse支援Apache Spark 3.1.2,其效能高於其前置專案。
  • 如需 Spark 集區調整和節點大小的相關資訊,請參閱Azure Synapse Analytics 中的 Spark 集區
  • 透過Azure Batch,您可以針對在 Azure Synapse自訂活動中提交的轉換,以內部平行方式相應放大。 Azure Batch支援可用來執行 AI 模型的特製化 GPU 優化 VM 大小。

可靠性

可靠性可確保您的應用程式符合您對客戶的承諾。 如需詳細資訊,請參閱 可靠性要素概觀。

如需 SLA 資訊,請參閱Azure Synapse SLA

安全性

安全性可提供保證,以避免刻意攻擊和濫用您寶貴的資料和系統。 如需詳細資訊,請參閱安全性要素的概觀

如需安全性最佳做法,請參閱下列文章:

成本最佳化

成本最佳化是關於考慮如何減少不必要的費用,並提升營運效率。 如需詳細資訊,請參閱成本最佳化要素的概觀

這些資源提供有關定價和成本優化的資訊:

注意

如需合作夥伴 AI 模型的定價和授權條款,請參閱合作夥伴的檔。

部署此案例

範例解決方案的 Bicep 部署可供使用。 若要開始使用此部署,請參閱 這些指示

此圖示范已部署範例解決方案的架構。

下載這個架構的 Visio 檔案

限制

此架構示範使用Azure Synapse的端對端地理處理和分析解決方案。 此範例實作的目標是感興趣的小型到中型區域,以及點陣資料的有限並行地理處理。

範例程式碼

下列指示說明如何使用 Synapse 筆記本,讀取、寫入和套用轉換至儲存在 Azure Data Lake Storage 中的點陣資料。 意圖是示範 Synapse 筆記本中的程式庫使用方式,而不是示範轉換。

必要條件

指示

  • 從點陣資料列印資訊:

    from osgeo import gdal
    gdal.UseExceptions()
    access_key = TokenLibrary.getSecret('<key-vault-name>','<secret-name>')
    gdal.SetConfigOption('AZURE_STORAGE_ACCOUNT', '<storage_account_name>')
    gdal.SetConfigOption('AZURE_STORAGE_ACCESS_KEY', access_key)
    dataset_info = gdal.Info('/vsiadls/aoa/input/sample_image.tiff')  #/vsiadls/<container_name>/path/to/image
    print(dataset_info)
    

    注意

    /vsiadls/是檔案系統處理常式,可讓您即時隨機讀取Azure Data Lake Storage檔案系統中可用的非公用檔案。 不需要下載整個檔案。 /vsiadls/ 類似于 /vsiaz/ 。 它會使用相同的組態選項進行驗證。 不同于 /vsiaz//vsiadls/ 提供實際的目錄管理和 Unix 樣式 ACL 支援。 對於某些功能,必須在 Azure 儲存體中開啟階層式支援。 如需詳細資訊,請參閱 /vsiadls/ 文件

    Driver: GTiff/GeoTIFF
    Files: /vsiadls/naip/input/sample_image.tiff
    Size is 6634, 7565
    Coordinate System is:
    PROJCRS["NAD83 / UTM zone 16N",
        BASEGEOGCRS["NAD83",
            DATUM["North American Datum 1983",
                ELLIPSOID["GRS 1980",6378137,298.257222101,
                    LENGTHUNIT["metre",1]]],
            PRIMEM["Greenwich",0,
                ANGLEUNIT["degree",0.0174532925199433]],
            ID["EPSG",4269]],
        CONVERSION["UTM zone 16N",
            METHOD["Transverse Mercator",
                ID["EPSG",9807]],
            PARAMETER["Latitude of natural origin",0,
                ANGLEUNIT["degree",0.0174532925199433],
                ID["EPSG",8801]],
            PARAMETER["Longitude of natural origin",-87,
                ANGLEUNIT["degree",0.0174532925199433],
                ID["EPSG",8802]],
            PARAMETER["Scale factor at natural origin",0.9996,
                SCALEUNIT["unity",1],
                ID["EPSG",8805]],
            PARAMETER["False easting",500000,
                LENGTHUNIT["metre",1],
                ID["EPSG",8806]],
            PARAMETER["False northing",0,
                LENGTHUNIT["metre",1],
                ID["EPSG",8807]]],
        CS[Cartesian,2],
            AXIS["(E)",east,
                ORDER[1],
                LENGTHUNIT["metre",1]],
            AXIS["(N)",north,
                ORDER[2],
                LENGTHUNIT["metre",1]],
        USAGE[
            SCOPE["Engineering survey, topographic mapping."],
            AREA["North America - between 90°W and 84°W - onshore and offshore. Canada - Manitoba; Nunavut; Ontario. United States (USA) - Alabama; Arkansas; Florida; Georgia; Indiana; Illinois; Kentucky; Louisiana; Michigan; Minnesota; Mississippi; Missouri; North Carolina; Ohio; Tennessee; Wisconsin."],
            BBOX[23.97,-90,84,-84]],
        ID["EPSG",26916]]
    Data axis to CRS axis mapping: 1,2
    Origin = (427820.000000000000000,3395510.000000000000000)
    Pixel Size = (1.000000000000000,-1.000000000000000)
    Metadata:
      AREA_OR_POINT=Area
    Image Structure Metadata:
      COMPRESSION=DEFLATE
      INTERLEAVE=PIXEL
      LAYOUT=COG
      PREDICTOR=2
    Corner Coordinates:
    Upper Left  (  427820.000, 3395510.000) ( 87d45'13.12"W, 30d41'24.67"N)
    Lower Left  (  427820.000, 3387945.000) ( 87d45'11.21"W, 30d37'18.94"N)
    Upper Right (  434454.000, 3395510.000) ( 87d41' 3.77"W, 30d41'26.05"N)
    Lower Right (  434454.000, 3387945.000) ( 87d41' 2.04"W, 30d37'20.32"N)
    Center      (  431137.000, 3391727.500) ( 87d43' 7.54"W, 30d39'22.51"N)
    Band 1 Block=512x512 Type=Byte, ColorInterp=Red
      Overviews: 3317x3782, 1658x1891, 829x945, 414x472
    Band 2 Block=512x512 Type=Byte, ColorInterp=Green
      Overviews: 3317x3782, 1658x1891, 829x945, 414x472
    Band 3 Block=512x512 Type=Byte, ColorInterp=Blue
      Overviews: 3317x3782, 1658x1891, 829x945, 414x472
    Band 4 Block=512x512 Type=Byte, ColorInterp=Undefined
      Overviews: 3317x3782, 1658x1891, 829x945, 414x472
    
  • 使用 GDAL 將 GeoTiff 轉換為 PNG:

    from osgeo import gdal
    gdal.UseExceptions()
    access_key = TokenLibrary.getSecret('<key-vault-name>','<secret-name>')
    gdal.SetConfigOption('AZURE_STORAGE_ACCOUNT', '<storage_account_name>')
    gdal.SetConfigOption('AZURE_STORAGE_ACCESS_KEY', access_key)
    tiff_in = "/vsiadls/aoa/input/sample_image.tiff" #/vsiadls/<container_name>/path/to/image
    png_out = "/vsiadls/aoa/input/sample_image.png" #/vsiadls/<container_name>/path/to/image
    options = gdal.TranslateOptions(format='PNG')
    gdal.Translate(png_out, tiff_in, options=options)
    
  • 將 GeoTiff 影像儲存在 Azure Data Lake Storage。

    由於資料儲存在雲端的方式,以及檔案處理常式 /vsiaz/ 和支援 /vsiadls/ 僅循序寫入的事實,因此我們使用 mssparkutils 套件中可用的檔案掛接功能。 將輸出寫入掛接位置之後,請將它複製到Azure Data Lake Storage,如下列範例轉換所示:

    import shutil
    import sys
    from osgeo import gdal
    from notebookutils import mssparkutils
    
    mssparkutils.fs.mount(
        "abfss://<container_name>@<storage_account_name>.dfs.core.windows.net",
        "/<mount_path>",
        {"linkedService":"<linked_service_name>"}
    )
    
    access_key = TokenLibrary.getSecret('<key-vault-name>','<secret-name>')
    gdal.SetConfigOption('AZURE_STORAGE_ACCOUNT', '<storage_account_name>')
    gdal.SetConfigOption('AZURE_STORAGE_ACCESS_KEY', access_key)
    
    options = gdal.WarpOptions(options=['tr'], xRes=1000, yRes=1000)
    gdal.Warp('dst_img.tiff', '/vsiadls/<container_name>/path/to/src_img.tiff', options=options)
    
    jobId = mssparkutils.env.getJobId()
    
    shutil.copy("dst_img.tiff", f"/synfs/{jobId}/<mount_path>/path/to/dst_img.tiff")
    

    在Azure Synapse中,您可以將Azure Data Lake Storage新增為其中一個連結的服務。 如需指示,請參閱 連結服務

範例解決方案

此架構的實作可於 GitHub 取得。

下圖顯示範例解決方案中的步驟:

此圖顯示範例解決方案中的步驟。

下載這個架構的 Visio 檔案

注意

資料會從空間資料源提取,並複製到Azure Data Lake Storage。 資料擷取不是參考實作的一部分。

  1. Azure Synapse管線會從Azure Data Lake Storage讀取空間資料。
  2. 資料會使用Azure Synapse筆記本中的 GDAL 程式庫來處理。
  3. 已處理的資料會儲存在Azure Data Lake Storage中。
  4. 已處理的資料會從Azure Data Lake Storage讀取,並由Azure Synapse自訂活動傳遞至物件偵測自訂視覺 AI 模型。 自訂活動會使用Azure Batch集區來執行物件偵測模型。
  5. 物件偵測模型會輸出偵測到的物件和周框方塊清單。
  6. 偵測到的物件會轉換成 GeoJSON,並儲存在Azure Data Lake Storage中。
  7. GeoJSON 資料會從 Azure Data Lake Storage讀取並儲存在 PostgreSQL 資料庫中。
  8. 資料會從 PostgreSQL 資料庫讀取。 您可以在 ArcGIS Pro、QGIS 和 Power BI 等工具中進一步視覺化。

在 Azure Synapse Spark 集區中安裝地理空間套件

您必須使用套件管理功能,在 Azure Synapse Spark 集區中安裝套件。 如需詳細資訊,請參閱Azure Synapse套件管理

若要支援Azure Synapse上的空間資料工作負載,您需要GDALRasterioGeoPandas等程式庫。 您可以使用 YAML 檔案,在無伺服器 Apache Spark 集區上安裝這些程式庫。 Anaconda 程式庫會預先安裝在 Spark 集區上。

必要條件

指示

  1. environment.yml檔案中提供下列程式庫和套件。 建議您使用此檔案在 Spark 集區中安裝程式庫。 如果您複製下列內容,請確定沒有索引標籤,因為 YAML 只允許空格做為縮排。

    name: aoi-env
    channels:
      - conda-forge
      - defaults
    dependencies:
      - azure-storage-file-datalake
      - gdal=3.3.0
      - libgdal
      - pip>=20.1.1
      - pyproj
      - shapely
      - pip:
        - rasterio
        - geopandas
    

    注意

    GDAL 使用虛擬檔案系統 /vsiadls/ 進行Azure Data Lake Storage。 這項功能可從 GDAL v3.3.0開始提供。 請務必使用 3.3.0 版或更新版本。

  2. 移至 https://web.azuresynapse.net 並登入您的工作區。

  3. 在流覽窗格中選取 [ 管理 ],然後選取 [Apache Spark 集區]。

  4. 選取 Spark 集區上的省略號按鈕 (...) 來選取 [ 套件 ]。 從本機上傳 environment.yml 檔案,並套用套件設定。

  5. 入口網站的通知區段會在安裝完成時通知您。 您也可以採取下列步驟來追蹤安裝進度:

    1. 移至 [ 監視 ] 索引標籤上的 Spark 應用程式清單。
    2. 選取對應至集區更新的 SystemReservedJob-LibraryManagement 連結。
    3. 檢視驅動程式記錄。
  6. 執行下列程式碼,以確認已安裝正確的程式庫版本。 也會列出 Conda 安裝的預先安裝程式庫。

    import pkg_resources
    for d in pkg_resources.working_set:
       print(d)
    

如需詳細資訊,請參閱 管理套件

參與者

本文由 Microsoft 更新和維護。 最初是由下列參與者所撰寫。

主要作者:

其他參與者:

下一步