🔍

sqlcmdで、Azure Data Lake Storageを利用する(匿名アクセスを利用)

2024/03/17に公開

はじめに

前回、ストレージ上のファイルに直接クエリできるAzure Data Lake Storageを紹介しました。

https://zenn.dev/arbr/articles/0de760d21649d6

今回はこのサービスに対して、sqlcmdでアクセスしてみました。

概要

  • データが格納されているストレージへの認可は、匿名アクセスを使います
  • Cloud Shellのsqlcmdからアクセスします
    • Azure Data Lake Storageを検索するためのAzure Synapse Analyticsのエンドポイントにアクセスします

参考

https://learn.microsoft.com/ja-jp/azure/synapse-analytics/sql/develop-storage-files-storage-access-control?tabs=public-access

やったこと

環境

前回作成した環境を使います。

https://zenn.dev/arbr/articles/0de760d21649d6

ストレージに対して、匿名アクセスの許可

以下を参考に、作成したストレージアカウントに対して、匿名アクセスを許可します。
https://learn.microsoft.com/ja-jp/azure/storage/blobs/anonymous-read-access-configure?tabs=portal#set-the-storage-accounts-allowblobpublicaccess-property

対象のアカウントの匿名アクセスを許可して保存します。

また、対象のコンテナの読み取りアクセスを有効にします。

Cloud Shellからsqlcmdでクエリ

Cloud Shellを起動して、Synapse ワークスペースのエンドポイントに対して、sqlcmdで接続します。サーバレスSQLエンドポイントを使います。以下の場所に記載されています。

使用するDBのユーザーは、環境構築時に作成されるSQL管理ユーザーsqladminuserを使用しています。

# パスワード確認がでます。
sqlcmd -S <サーバーレス SQL エンドポイント> -d master -U sqladminuser

以下のSQLを実行します。

SELECT count(*) FROM OPENROWSET( BULK '<コンテナーのURL>/corona-tokyo/2022/130001_tokyo_covid19_patients_2022.csv', FORMAT='CSV', PARSER_VERSION='2.0') AS [result];
go

クエリが返ってきました。

おわりに

今回はAzure Data Lake StorageをSQLServerにアクセスするように、sqlcmdで実行してみました。
匿名アクセスですと、セキュリティ的に望ましくないので、別途他の方法も試してみようと思います。
この記事がどなたかのお役に立てれば幸いです。

Discussion