注:本記事は(2021年9月20日)に公開された(Snowflake Launches Unstructured Data Support in Public Preview)を翻訳して公開したものです。

Snowflakeは、使用開始の1日目から構造化データと非構造化データをサポートできるようになりました。Snowflakeはかねてからこの種のデータに対して卓越したパフォーマンスを提供するなど、これらの処理に関してパイオニア的存在ではありましたが、さらに非構造化データへのサポートを追加することにより、単一のプラットフォームでより多くの使用事例を実現できるようになりました。非構造化データ管理のサポートには、Snowflake内で非構造化データを格納、アクセス、処理、管理、統制、および共有するための組み込み機能も含まれます。皆さんも、パフォーマンス、同時実行性、そして非構造化データに対応した規模を備えたSnowflakeデータクラウドのあらゆるメリットを体感してください。

これから説明する機能のデモをご覧になりたい方は、当社のオンデマンドウェビナー7 Ways to Start Using Unstructured Data in Snowflake(Snowflakeで非構造化データの利用を開始する7つの方法)にアクセスしてください。

カスタマーの使用事例

この数年、画像、動画、音声、ドキュメントといった非構造化データの使用が普及してきました。多くの組織がすでに、アナリティクスデータ用のデータレイク、すなわち中央リポジトリとしてSnowflakeを採用しています。業界で非構造化データの利用が増えるにつれ、これらの組織は非構造化データのメリットを生かして競争力を維持する必要性を感じていました。そこで、組織は非構造化データからインサイトを得て、そのポテンシャルをフルに活用できるよう、Snowflakeに非構造化データへのサポートを求めるようになりました。

これから使用事例のいくつかをご紹介します。事例はあくまでごく一部ですが、組織がさまざまな方法で非構造化データから価値を引き出していることを理解する一助になることでしょう。 

  • アナリティクス用として、キー/値ペアを抽出するためのPDFドキュメントを格納する。
  • コールセンターの録音(音声ファイル)を格納して、センチメント分析などのインサイトを得る。
  • 医療画像(DICOM)上で機械学習を実行し、研究用としてインサイトを得る。
  • 保険証や処方箋のスクリーンショットを格納し、光学文字認識処理を実行してテキストを抽出してアナリティクスに用いる。

上記のとおり、非構造化データには多様な使用事例があります。それらに対応することで、カスタマーはデータアーキテクチャ内の中央データリポジトリとしてSnowflakeを使用し続けることが可能となるでしょう。

「当社のデータチームは、商品の画像を分析して機能を特定し、類似の商品を提案しています。非構造化データに対応しているSnowflakeのおかげで、当社はアーキテクチャをシンプル化し、商品の画像、注文、ウェブ追跡など、あらゆる商品データを簡単に照会できる一元的な場所を構築することができました。私たちはこの機能によって実現できる商品画像ファイルの新たな使用事例について大いに期待していると同時に、近い将来、このデータに関してSnowflakeのデータシェアリング機能も活用していく予定です。」

— Laurent Vandenbeusch氏、データテックリーダー、Tape à l’oeil社

「半構造化データと非構造化データを活用し、それらのデータ間の複雑な相互関係を生かすことが、ここ数年の当社の課題でした。非構造化データをサポートするSnowflakeの最近の機能リリースにより、私のチームはSnowflakeのMicrosoft Azure内の構造化されたリレーショナルデータを使用して画像をマッシュアップし、いくつかの当社固有の使用事例に対応できるようになったほか、Tableauのようなデータ可視化ツールを使用して、よりリッチなインサイトを構築できるようになりました。」

—Richie Bachala氏、Fortune 200に名を連ねる国際的製造企業のグローバルデータエンジニアリングマネージャー

非構造化データのストレージとガバナンス

非構造化データの格納とガバナンスは、データアーキテクチャ管理者にとって最も重要なタスクの1つです。Snowflakeでは、内部ステージまたは外部ステージに非構造化データファイルを格納できます。格納したファイルには、シンプルなGET REST APIを使用することで簡単にアクセスできます。

ファイルのURLフォーマット: https://<account>.snowflakecomputing.com/api/files/<db_name>/<schema_name>/<stage_name>/<file_path>.

Snowflakeのステージはクラウド対応であるため、データエンジニアはクラウドに対応した形でファイルを格納、取得できます。

非構造化ファイルのガバナンスも、シンプルなクラウド対応のコマンドを使用して実行されます。各クラウドプロバイダーのIDおよびアクセス管理(IAM)システムで複雑なセキュリティポリシーやガバナンスポリシーを管理する必要はありません。ファイルのセキュリティ保護は、シンプルなGRANT文やREVOKE文で行うことができます。次に例を示します。

grant read on @my_stage to role data_analyst;

grant write on @my_stage to role data_engineer;

ファイルURLを使用した非構造化データへのアクセス

Snowflakeのステージに格納された非構造化データには、ファイルURLを通じてアクセスできます。file関数を使用することで、ステージに格納された非構造化データファイルに対しては、下記の3種類のURLを生成できます。

署名付きURL: 名前が示すとおり、署名付きURLはすでに認証が済んでいるため、ユーザーはこのURLを使用するだけでファイルをダウンロードできます。

ステージファイルURL:このURLを使用してファイルにアクセスするには、ユーザーはSnowflakeでの認証とステージに関する読み取り権限が必要です。

範囲指定ファイルURL:ステージに関する権限なしに、期間と範囲が限定されたファイルアクセスをユーザーに提供する際に生成する、範囲限定のファイルURLです。

各ファイルURLタイプの詳細については、ドキュメンテーションを参照してください。

ディレクトリテーブル

パブリッククラウドプロバイダーによって提供されているBlobストレージサービスは、長年にわたり、非構造化データファイルのデフォルトストレージであり続けてきました。しかし、アナリティクス使用事例の場合、Blobには多くの制約がありました。Blobストレージロケーション内でのファイルのリスティングは非常に時間がかかり、可能なのはプレフィックスに基づく検索のみです。カスタマーはバケット内で*.pdfファイルを検索することもできません。

Snowflakeの非構造化データ管理機能では、ステージ内のファイルカタログに関する最新のタブビューを提供する組み込み型のディレクトリテーブルをローンチします。ファイルカタログがテーブルとして提供されるようになるため、ユーザーは非常に強力なタスクを、卓越したパフォーマンスで実行できます。ディレクトリテーブル上では、リスティングファイルはシンプルなselect *コマンドになります。より高度なファイル検索の場合、ユーザーは複雑なregex表現を使用してクエリを実行できます。

最後に、ユーザーはディレクトリテーブルの上にテーブルストリームを構築できます。これは、非構造データの処理のためのパイプラインを作成する上で強力な基礎となります。テーブルストリームは最後にプロセスジョブが実行されて以来新たに作成されたすべての新規ファイルを追跡するため、ユーザーは非構造データファイルを処理するための連続データパイプラインを構築できます。

非構造化データの処理

上記のとおり、カスタマーは非構造化データを処理するための連続データパイプラインを構築できます。ファイルの処理は外部関数を用いて実行できます。SnowflakeはAWS、Azure、GCPクラウド内の外部関数に対応しています。外部関数に関するドキュメンテーションは、こちらからご覧いただけます。

カスタマーは、さまざまな使用事例に対して外部関数を書くことで、以下のようなタスクを実行できます。

  • 画像からテキストを抽出する
  • 機械学習サービスを使用して画像を処理し、ラベルを認識する
  • PDFファイルを処理してキー/値ペアを抽出する 

カスタマーは、ディレクトリテーブルと外部関数を使用して非構造化データファイルを処理することで、簡単に連続データパイプラインを実装できます。カスタマーがSnowflake内でextract_pdf_data(file url)という外部関数を使用する場合について考えてみましょう。この関数はPDFファイルを解析して、PDFドキュメントから抽出したキー/値ペアを含むバリアントを返します。

これで、カスタマーは下記のようなパイプラインを実行して、PDFドキュメントを連続的に実行および処理できます。

------ SETUP ------

-- Create directory table and select files from directory table 

create stage my_documents directory = (enable = true)

encryption = (type = 'snowflake_sse');

-- put files in the stage

put file:///<path> @my_documents;

select * from directory(@my_documents);

-- Create a stream on directory table

create stream documents_stream on stage my_documents;

------ CONTINUOUS PROCESS ------

-- Add new files to a stage

put file:///<path> @my_documents;

-- Select new files added to the stage

select file_url from documents_stream;

-- Process new PDF files using a UDF and store variants in document_data table.

create task process_documents

as insert into document_data 

select extract_pdf_data(file_url), relative_file_path

from documents_stream;

Snowflakeにより、データサイエンティストは自ら選択したツールを使用して非構造化データを処理できるため、他者に成果物を簡単に提供できます。その例をいくつかご紹介します。

近々当社はJava UDFを使用してSnowflake内でファイルを処理するための改良機能の提供を開始する予定です。

非構造化データを安全に共有する

データシェアリングは、Snowflakeデータクラウドが提供する中核的な価値提案の1つです。だからこそ当社は、他の多くの機能よりもまず非構造化データの共有への対応を優先しています。ユーザーはディレクトリテーブルに関する安全なビューを作成し、それらを他のアカウントと共有できます。この場合、データを物理的にコピーしたり、認証情報を利用者と共有したりする必要がないため、非構造化データファイルのシェア方法として最善です。

create secure view files_v as 

select build_scoped_file_url(@my_stage, relative_file_path)

from directory(@my_stage);

grant select on view files_v to share s;

重要事項

新たにローンチされた非構造化データ管理機能を使用することで、カスタマーはSnowflakeステージ内に非構造化データファイルを格納し、シンプルなRBACコマンドを使用してデータを制御できるようになりました。さらに組み込み型のディレクトリテーブルを有効化することで、ステージ内ですばやくリスティングを実行したり、ファイルを検索したりできます。また、カスタマーは、ディレクトリテーブルのストリームや外部関数を使用して、非構造化データファイルを処理するための連続データパイプラインを構築できます。最後に、データシェアリング機能やSnowflakeデータマーケットプレイスを使用して、非構造化データを共有することもできます。

このブログで取り上げた機能に関するドキュメントは、こちらで閲覧できます。

このブログで取り上げた機能のデモをご覧になりたい方は、当社のオンデマンドウェビナー7 Ways to Start Using Unstructured Data in Snowflake(Snowflakeで非構造化データの利用を開始する7つの方法)にアクセスしてください。