見出し画像

続:AWS Bedrock と Aurora でRAGを作る


本記事の概要

前回

Bedrock の Knowledge Bases (ナレッジベース)を作成した。
ベクトルデータベースにはAurora Serverless V2 PostgreSQL を使用した。

今回

作成したナレッジベースに対し、実際に問い合わせをしていい感じに結果が返ってくることを確認する。
やること・要素は簡潔に言うと以下の通り

  • boto3のbedrock_agent_runtime.retrieve()を用い、キーワードで検索する

  • boto3のbedrock_agent_runtime.retrieve_and_generate()を用い、キーワード検索のうえLLMで回答を生成する

  • ナレッジベースに対して検索をする際にメタデータを用いて検索範囲を制限する(フィルタリングを行う)

キーワード検索

事前に複数のドキュメントをデータソース(S3)に格納しておき、
それらのドキュメントの中から、入力キーワードに応じて関連箇所の検索・取得を行う。

全体像・流れ

  1. ナレッジベースへのデータ登録

    1. データソース(S3)にドキュメントをアップロード

    2. ナレッジベースの「同期」により、データソースを取得・ベクトルDBへの登録を行う

  2. キーワード検索

    1. ドキュメントの中から検索したいキーワードを引数として渡すかたちでナレッジベースに問い合わせ

    2. ナレッジベースは引数に関連の高いドキュメントやテキストなどを返す

実践

Pythonで実践。boto3を用いて問い合わせを行う。

import boto3
import json

bedrock_agent_runtime = boto3.client(
    service_name = "bedrock-agent-runtime"
)

def retrieve(query, kbId, numberOfResults=5):
    return bedrock_agent_runtime.retrieve(
        retrievalQuery= {
            'text': query
        },
        knowledgeBaseId=kbId,
        retrievalConfiguration= {
            'vectorSearchConfiguration': {
                'numberOfResults': numberOfResults,
                'overrideSearchType': "SEMANTIC", # HYBRID or SEMANTIC
            }
        }
    )

# ナレッジベースに対して検索したいワードと、ナレッジベースのIDを引数に渡す。
response = retrieve("入札業務の課題", "XXXXXXXXX")


# 取得した戻り値の整形用
def format_response(response):
    return json.dumps(response, indent=4, ensure_ascii=False)

# 結果整形して出力
formatted_result = format_response(response)
print(formatted_result)

結果

{
    "ResponseMetadata": {
        "RequestId": "c603c885-b4bb-4a56-a277-1fb5d0d38477",
        "HTTPStatusCode": 200,
        "HTTPHeaders": {
            "date": "Fri, 22 Nov 2024 10:38:39 GMT",
            "content-type": "application/json",
            "content-length": "3959",
            "connection": "keep-alive",
            "x-amzn-requestid": "c603c885-b4bb-4a56-a277-1fb5d0d38477"
        },
        "RetryAttempts": 0
    },
    "retrievalResults": [
        {
            "content": {
                "text": ". ALL RIGHTS RESERVED. 21     商社における⼊札業務 • 多くの国際⼊札に参加 • 取引⾦額の規模も⼤きく、更なるビジネスチャンス創出にもつながる重要な業務     鉄鋼メーカーなど商社公共機関など     注⽂ 注⽂     納期・スペック・数量等の情報をもとに、部材を納⼊するCopyright © MITSUI & CO., LTD."
            },
            "location": {
                "s3Location": {
                    "uri": "s3://<バケット名>/ファイル名.pdf"
                },
                "type": "S3"
            },
            "score": 0.4144236974879598
        },
        {
            "content": {
                "text": ". ALL RIGHTS RESERVED. 26     デモをご覧ください     解決策と成果Copyright © MITSUI & CO., LTD. ALL RIGHTS RESERVED. 27     Demo (動画)Copyright © MITSUI & CO., LTD. ALL RIGHTS RESERVED. 28     要旨 作成     カウンター案作成 回答⼊⼿     ⼊札書 再読込     ⼊札書類準備 訂正作業等     ⼊札書 読込     ⼯程     時間 (⼈⼒) 2時間 5時間 3時間 11時間12 時間     時間 (アプリ利⽤) 5時間 1時間4.2時間 11時間     ⼊札実務者の場合、1 ⼊札あたり約12時間削減可能     解決策と成果 三井物産スチールでの導⼊効果Copyright © MITSUI & CO., LTD."
            },
            "location": {
                "s3Location": {
                    "uri": "s3://<バケット名>/ファイル名.pdf"
                },
                "type": "S3"
            },
            "score": 0.3872854991484931
        },
        {
            "content": {
                "text": "ALL RIGHTS RESERVED. 29     ビギナー社員の場合、1 ⼊札あたり約50時間削減可能 業務を完遂できた⼈は3名中1名→3名中3名     解決策と成果 三井物産スチールでの導⼊効果     要旨 作成     カウンター案作成 回答⼊⼿     ⼊札書 再読込     ⼊札書類準備 訂正作業等     ⼊札書 読込⼯程     時間 (⼈⼒) 5時間 5時間 15時間 11時間60 時間     時間 (アプリ利⽤)     5時間 3.2時間11.2時間 11時間Copyright © MITSUI & CO., LTD."
            },
            "location": {
                "s3Location": {
                    "uri": "s3://<バケット名>/ファイル名.pdf"
                },
                "type": "S3"
            },
            "score": 0.3744757450018169
        },
        {
            "content": {
                "text": "ALL RIGHTS RESERVED. 22     ~~~~ ~ ~~~~ ~     ~~~~~ ~~~~~ ~~~~~ ~~~~~     要旨     取引先 : ~~~ 価格条件: ~~~ 保証 : ~~~ 規格 : ~~~     ⼊札書説明書 (100〜200ページ)     ~~~~~ ~~~~~ ~~~~~ ~~~~~     商社における⼊札業務     100ページ超の⼊札説明書を読みこみ、 社内や取引先に要旨、必要書類、稟議書を作成し展開 1⼊札あたり30〜40時間で対応する必要あり     「⼊札書読みこみ」から「要旨作成」を短期間で実⾏     (2〜3ページ) 回答案 取引先Copyright © MITSUI & CO., LTD. ALL RIGHTS RESERVED. 23     課題 Liquidated Damages? (遅延損害⾦) Warranty? (保証)Copyright © MITSUI & CO., LTD."
            },
            "location": {
                "s3Location": {
                    "uri": "s3://<バケット名>/ファイル名.pdf"
                },
                "type": "S3"
            },
            "score": 0.3357541261671835
        },
        {
            "content": {
                "text": "ALL RIGHTS RESERVED. 24     課題     ⼊札説明書を読むのに時間がかかる 業界知識・専⾨知識が必要Copyright © MITSUI & CO., LTD. ALL RIGHTS RESERVED. 25     解決策と成果 • ⼊札書解析アプリを開発 • アプリ上で「AI 要旨項⽬抽出」、「AI 重要単熟語着⾊」、「要旨⽣成」が     でき半⾃動化 客先情報 ~~~~~~~~ 案件概要 ~~~~~~~~ ~~~~~~~~ 注意点 ~~~~~~~~ ~~~~~~~~     契約書/⼊札書類 (100~200ページ)     要旨⽣成AI 要旨項⽬抽出     ~~~~~ ~~~~~ ~~~~~     ~~~~~ ~~~~~ ~~~~~     ~~~~~ ~~~~~ ~~~~~     Key Value     取引先 ~~~~~~     価格条件 ~~~~~~     保証 ~~~~~~     規格 ~~~~~~     「AI"
            },
            "location": {
                "s3Location": {
                    "uri": "s3://<バケット名>/ファイル名.pdf"
                },
                "type": "S3"
            },
            "score": 0.3007392831618235
        }
    ]
}

このように、

  • このデータソース(S3)のこのファイルに

  • こういった関連情報の記載があった

  • 関連度のスコアはこの通り

といった形で複数の検索結果を一度に返してくれる。
いくつ返すようにするかはパラメータ設定可能。
今回は1つのファイルのみピックアップされているけど、別のファイルにも関連情報の記載があれば、異なるファイルの情報も結果として返してくれる。

キーワード検索,LLMで回答を生成

つまり、いわゆるRAG機能の実践。
前述の「キーワード検索」ではLLMは登場せず、ベクトルDBに対して検索した結果を取得するところまで。
今回は、その結果をもとに回答テキストを生成するところまでを実施。

実践

Pythonで実践。boto3を用いて問い合わせを行う。

import boto3
import json

bedrock_agent_runtime = boto3.client(
    service_name = "bedrock-agent-runtime"
)

def retrieveAndGenerate(input, kbId, numberOfResults=5):
    return bedrock_agent_runtime.retrieve_and_generate(
        input={
            'text': input
        },
        retrieveAndGenerateConfiguration={
            'type': 'KNOWLEDGE_BASE',
            'knowledgeBaseConfiguration': {
                    'knowledgeBaseId'       : kbId,
                    'modelArn'              : 'arn:aws:bedrock:ap-northeast-1::foundation-model/anthropic.claude-3-5-sonnet-20240620-v1:0',
                    'retrievalConfiguration': {
                        'vectorSearchConfiguration': {
                            'overrideSearchType': "SEMANTIC",
                            'numberOfResults': numberOfResults,
                        }
                    }
            }
        }
    )
response = retrieveAndGenerate("AWSで最初にやるべき設定は?", "XXXXXXXXXX")

# 整形用関数
def format_response(response):
    return json.dumps(response, indent=4, ensure_ascii=False)


# 結果整形して出力
formatted_result = format_response(response)
print(formatted_result)

補足

  • numberOfResults:ベクトルDBの検索結果をいくつまで取得するかを指定

    • ここでは件数を5件と指定

  • modelArn:Bedrock上で使えるLLMのARNの指定。

    • ここではClaude3.5 Sonnet を使用

    • ARNはAWS CLIを用いるなどして取得可能だが、面倒なので他の人が整理してくれている情報を活用👇️

  • 関数の仕様詳細はこちらの公式資料を参照

結果

{
    "ResponseMetadata": {
        "RequestId": "9e5b9832-5647-43ec-81c6-41a07fd1cc35",
        "HTTPStatusCode": 200,
        "HTTPHeaders": {
            "date": "Fri, 22 Nov 2024 10:56:14 GMT",
            "content-type": "application/json",
            "content-length": "10334",
            "connection": "keep-alive",
            "x-amzn-requestid": "9e5b9832-5647-43ec-81c6-41a07fd1cc35"
        },
        "RetryAttempts": 4
    },
    "citations": [
        {
            "generatedResponsePart": {
                "textResponsePart": {
                    "span": {
                        "end": 282,
                        "start": 0
                    },
                    "text": "AWSで最初にやるべき設定は、主に以下の3つの分野に分類されます:\n\n1. ログ・モニタリング:\n- AWS CloudTrailを設定して、AWSの操作ログを記録する。\n- AWS Configを有効化し、リソースの設定変更を追跡する。\n\n2. セキュリティ:\n- AWS IAMを適切に設定する。特に、rootユーザーにMFA(多要素認証)を設定することが重要。\n- 通常の作業にはIAMユーザーを使用し、rootユーザーは必要最小限の使用に留める。\n\n3. 契約・コスト管理:\n- AWS Budgetsを使用して予算を設定し、コスト超過のアラートを設定する。"
                }
            },
            "retrievedReferences": [
                {
                    "content": {
                        "text": "1     AWSアカウントで 最初にやっておくべき設定     AWS事業本部 コンサルティング部     中村 健一2自己紹介     中村 健一 (Nakamura Kenichi) クラスメソッド株式会社 AWS事業本部 コンサルティング部 ソリューションアーキテクト     - 経歴 ○ SIer (約4年) →クラスメソッド     - 資格 ○ AWS Certification × 12 ○ GoogleCloud Certification × 10 ○ IPA プロジェクトマネージャ試験他     - 趣味 ○ 甘いものを食べること     23AWSで最初にやる設定     ログ・ モニタリング     契約・コストセキュリティ4ログ・モニタリング     ログ・ モニタリング      AWS CloudTrail      AWS Config     AWSの操作ログを記録するサービス"
                    },
                    "location": {
                        "s3Location": {
                            "uri": "s3://<バケット名>/ファイル名.pdf"
                        },
                        "type": "S3"
                    }
                },
                {
                    "content": {
                        "text": "ユーザー」 「グループ」 「ポリシー」等を通して管理する19AWS IAM     注意 rootユーザは普段利用しません!     ✔ アカウント作成に使用したメールアドレスを使用するユーザー
     ✔ すべてのAWSサービスとリソースへの完全なアクセス権を持つ
     ✔ サポート契約等、ルートユーザーにしかできない操作を行う場合のみ利用
     
 
 
✔ レコメンデーションがあれば対応する 
     
     20AWS IAM     やっておくべき 設定 rootユーザーの「 MFA」を設定する21AWS IAM     AWS アカウント     ポリシー ポリシー     IAM グループ     IAM ユーザ     IAM ユーザ     IAM グループ     IAM ユーザ     IAM ユーザ     通常作業時は、 IAMユーザーを利用"
                    },
                    "location": {
                        "s3Location": {
                            "uri": "s3://<バケット名>/ファイル名.pdf"
                        },
                        "type": "S3"
                    }
                },
                {
                    "content": {
                        "text": "グローバルリソースは1つのリージョンでのみ有効化する
     16AWS Config     やっておくべき 設定 リージョン毎に「記録を有効化」する     メインで利用している リージョン     他リージョン     Configの有効化作業 ○ ○     グローバルリソースを含める ○ -17セキュリティ     セキュリティ AWS IAM     AWSリソースのアクセス管理をするサービス      Amazon GuardDuty AWSの脅威検知サービス      AWS Security Hub AWSセキュリティの統合管理サービスAWS IAM AWSリソースのアクセス管理をするサービス     18セキュリティ     アクセス制御を 「ユーザー」 「グループ」 「ポリシー」等を通して管理する19AWS IAM     注意 rootユーザは普段利用しません"
                    },
                    "location": {
                        "s3Location": {
                            "uri": "s3://<バケット名>/ファイル名.pdf"
                        },
                        "type": "S3"
                    }
                },
                {
                    "content": {
                        "text": "$ を設定した例
     月末に予算オーバーの予測
     予算を設定37AWS Budgets     例)しきい値超過のメール通知
38AWS Budgets     やっておくべき 設定     「予算」の設定     ✔ 複数の予算を設定可能
     ✔ 1日に1回の集計で評価を行う
     ✔ コスト配分タグと組み合わせることでユーザ毎にアラート設定が可能
     
 
 
39まとめ     ログ・ モニタリング     セキュリティ     契約・コスト     契約・コスト40さいごに     ログ・ モニタリング     セキュリティ     契約・コスト     Configのルール どれを設定すればいい     の?     セキュリティ設定 個別に設定するの     大変だな。。。"
                    },
                    "location": {
                        "s3Location": {
                            "uri": "s3://<バケット名>/ファイル名.pdf"
                        },
                        "type": "S3"
                    }
                }
            ]
        },
        {
            "generatedResponsePart": {
                "textResponsePart": {
                    "span": {
                        "end": 412,
                        "start": 284
                    },
                    "text": "これらの設定を行うことで、AWSアカウントのセキュリティを強化し、リソースの変更を追跡し、コストを管理することができます。特に、セキュリティ面ではrootユーザーの保護が重要で、日常的な操作には適切な権限を持つIAMユーザーを使用することが推奨されています。"
                }
            },
            "retrievedReferences": [
                {
                    "content": {
                        "text": "ユーザー」 「グループ」 「ポリシー」等を通して管理する19AWS IAM     注意 rootユーザは普段利用しません!     ✔ アカウント作成に使用したメールアドレスを使用するユーザー
     ✔ すべてのAWSサービスとリソースへの完全なアクセス権を持つ
     ✔ サポート契約等、ルートユーザーにしかできない操作を行う場合のみ利用
     
 
 
✔ レコメンデーションがあれば対応する 
     
     20AWS IAM     やっておくべき 設定 rootユーザーの「 MFA」を設定する21AWS IAM     AWS アカウント     ポリシー ポリシー     IAM グループ     IAM ユーザ     IAM ユーザ     IAM グループ     IAM ユーザ     IAM ユーザ     通常作業時は、 IAMユーザーを利用"
                    },
                    "location": {
                        "s3Location": {
                            "uri": "s3://<バケット名>/ファイル名.pdf"
                        },
                        "type": "S3"
                    }
                },
                {
                    "content": {
                        "text": "グローバルリソースは1つのリージョンでのみ有効化する
     16AWS Config     やっておくべき 設定 リージョン毎に「記録を有効化」する     メインで利用している リージョン     他リージョン     Configの有効化作業 ○ ○     グローバルリソースを含める ○ -17セキュリティ     セキュリティ AWS IAM     AWSリソースのアクセス管理をするサービス      Amazon GuardDuty AWSの脅威検知サービス      AWS Security Hub AWSセキュリティの統合管理サービスAWS IAM AWSリソースのアクセス管理をするサービス     18セキュリティ     アクセス制御を 「ユーザー」 「グループ」 「ポリシー」等を通して管理する19AWS IAM     注意 rootユーザは普段利用しません"
                    },
                    "location": {
                        "s3Location": {
                            "uri": "s3://<バケット名>/ファイル名.pdf"
                        },
                        "type": "S3"
                    }
                },
                {
                    "content": {
                        "text": "$ を設定した例
     月末に予算オーバーの予測
     予算を設定37AWS Budgets     例)しきい値超過のメール通知
38AWS Budgets     やっておくべき 設定     「予算」の設定     ✔ 複数の予算を設定可能
     ✔ 1日に1回の集計で評価を行う
     ✔ コスト配分タグと組み合わせることでユーザ毎にアラート設定が可能
     
 
 
39まとめ     ログ・ モニタリング     セキュリティ     契約・コスト     契約・コスト40さいごに     ログ・ モニタリング     セキュリティ     契約・コスト     Configのルール どれを設定すればいい     の?     セキュリティ設定 個別に設定するの     大変だな。。。"
                    },
                    "location": {
                        "s3Location": {
                            "uri": "s3://<バケット名>/ファイル名.pdf"
                        },
                        "type": "S3"
                    }
                }
            ]
        }
    ],
    "output": {
        "text": "AWSで最初にやるべき設定は、主に以下の3つの分野に分類されます:\n\n1. ログ・モニタリング:\n- AWS CloudTrailを設定して、AWSの操作ログを記録する。\n- AWS Configを有効化し、リソースの設定変更を追跡する。\n\n2. セキュリティ:\n- AWS IAMを適切に設定する。特に、rootユーザーにMFA(多要素認証)を設定することが重要。\n- 通常の作業にはIAMユーザーを使用し、rootユーザーは必要最小限の使用に留める。\n\n3. 契約・コスト管理:\n- AWS Budgetsを使用して予算を設定し、コスト超過のアラートを設定する。 これらの設定を行うことで、AWSアカウントのセキュリティを強化し、リソースの変更を追跡し、コストを管理することができます。特に、セキュリティ面ではrootユーザーの保護が重要で、日常的な操作には適切な権限を持つIAMユーザーを使用することが推奨されています。"
    },
    "sessionId": "7fa67c11-c011-49cd-8c5e-4cc55893b611"
}

ベクトルDBの検索結果と、それをもとに最終的にLLMで生成したテキストが返却されている。
LLMで生成した文章を上記から抜粋したのが👇️

AWSで最初にやるべき設定は、主に以下の3つの分野に分類されます:

1. ログ・モニタリング:
- AWS CloudTrailを設定して、AWSの操作ログを記録する。
- AWS Configを有効化し、リソースの設定変更を追跡する。

2. セキュリティ:
- AWS IAMを適切に設定する。特に、rootユーザーにMFA(多要素認証)を設定することが重要。
- 通常の作業にはIAMユーザーを使用し、rootユーザーは必要最小限の使用に留める。

3. 契約・コスト管理:
- AWS Budgetsを使用して予算を設定し、コスト超過のアラートを設定する。 これらの設定を行うことで、AWSアカウントのセキュリティを強化し、リソースの変更を追跡し、コストを管理することができます。特に、セキュリティ面ではrootユーザーの保護が重要で、日常的な操作には適切な権限を持つIAMユーザーを使用することが推奨されています。

いい感じっぽい。

検索範囲の制限(フィルタリング)

概要

ナレッジベース上のデータのうち、常に誰でもすべてのデータから検索可能、としていいとは限らない。

  • XX部署の人は、○○関連のデータソースからのみ検索可能

  • ファイルをアップロードした本人のみ、そのファイル(データソース)から検索可能

  • 検索に際して、ファイル(データソース)のアップロード日がXX年XX月以降のものからのみ検索したい

などといった要件は想定される。
これらを実現できるのがフィルタリング機能である。

実践

大きく以下のような流れ。(メタデータの管理が必要)

  1. DBテーブルにカラム追加
    ナレッジベース用に Aurora Serverless V2 PostgreSQL 内に作成したテーブルに対して、メタデータカラムを追加する

  2. ドキュメントアップロード時にメタデータもアップロード
    フィルタリングしないなら、ドキュメントのみアップロードすればOKだが、フィルタリングするなら、そのドキュメントのメタデータを記載したJSONファイルをアップロードする

  3. メタデータを用いてフィルタリングしながら関数を実行
    扱う関数は前述の retrieve_and_generate() だが、パラメータとしてフィルタリング情報を渡してやるようにする

メタデータについて

  • ファイル名の仕様

    • S3条にアップロードするファイルが hoge.pdf だとすると、メタデータ管理用ファイルは hoge.pdf.metadata.json となる。
      同じバケットに、この2つのファイルをアップロードしてやる

  • メタデータの仕様

    • 以下の例のような形で、そのドキュメントのメタデータ情報を記載する

{
  "metadataAttributes" : {
    "access_scope"  : "all",
    "data_category" : "Tech_Data",
    "description"   : "AWSの設定",
    "created_at"    : 20241115,
    "owner_id"      : "id000001"
  }
}

参考にさせてもらった記事

1.DBテーブルにカラム追加

上記のようなメタデータを扱いたい場合、作成済みのDBテーブルにカラムを追加してやる必要あり。

ALTER TABLE bedrock_kb_test
  ADD COLUMN access_scope TEXT,
  ADD COLUMN data_category TEXT,
  ADD COLUMN description TEXT,
  ADD COLUMN created_at INTEGER,
  ADD COLUMN owner_id TEXT
;

2.ドキュメントアップロード時にメタデータもアップロード

前述の仕様通り、S3バケットにドキュメントとメタデータ情報が記載されたJSONファイルをアップロードする。

※そのうえでナレッジベース上で「同期」をしないとナレッジベース自体は更新されないので注意。

3.メタデータを用いてフィルタリングしながら関数を実行

前述と同様 retrieve_and_generate 関数を用いるが、 filter で条件指定を行うことで、この条件でフィルタリングしたうえでの検索が行われる。

import boto3
import json

bedrock_agent_runtime = boto3.client(
    service_name = "bedrock-agent-runtime"
)

def retrieveAndGenerate(input, kbId, numberOfResults=5):
    return bedrock_agent_runtime.retrieve_and_generate(
        input={
            'text': input
        },
        retrieveAndGenerateConfiguration={
            'type': 'KNOWLEDGE_BASE',
            'knowledgeBaseConfiguration': {
                    'knowledgeBaseId'       : kbId,
                    'modelArn'              : 'arn:aws:bedrock:ap-northeast-1::foundation-model/anthropic.claude-3-5-sonnet-20240620-v1:0',
                    'retrievalConfiguration': {
                        'vectorSearchConfiguration': {
                            'overrideSearchType': "SEMANTIC",
                            'numberOfResults': numberOfResults,
                            # メタデータでフィルタリング
                            'filter': {
                                'andAll': [
                                    {
                                        'equals': {
                                            'key': 'data_category',
                                            'value': 'Tech_Data'
                                        }
                                    },
                                    {
                                        'equals': {
                                            'key': 'access_scope',
                                            'value': 'all'
                                        }
                                    },
                                    {
                                        'greaterThan': {
                                            'key': 'created_at',
                                            'value': 20241001
                                        }
                                    }
                                ]
                            }
                        }
                    }
            }
        }
    )
response = retrieveAndGenerate("組み合わせについて教えて", "XXXXXXXX")

# 整形用関数
def format_response(response):
    return json.dumps(response, indent=4, ensure_ascii=False)

# 結果整形して出力
formatted_result = format_response(response)
print(formatted_result)

結果。指定したフィルターの範囲で検索が行われて、最終的にLLMで回答が生成されている。

{
    "ResponseMetadata": {
        "RequestId": "34ceb0f0-f7de-4953-87c5-14e04b63210e",
        "HTTPStatusCode": 200,
        "HTTPHeaders": {
            "date": "Sat, 23 Nov 2024 01:59:45 GMT",
            "content-type": "application/json",
            "content-length": "5874",
            "connection": "keep-alive",
            "x-amzn-requestid": "34ceb0f0-f7de-4953-87c5-14e04b63210e"
        },
        "RetryAttempts": 0
    },
    "citations": [
        {
            "generatedResponsePart": {
                "textResponsePart": {
                    "span": {
                        "end": 342,
                        "start": 0
                    },
                    "text": "Databricksでは、データの取り込み(EL)と変換(T)に様々な方法を組み合わせて使用することができます。\n\nデータ取り込み(EL)の方法には以下のようなものがあります:\n- Autoloader/COPY INTO(ファイルからの取り込み)\n- フェデレーション\n- Delta Sharing\n- Lakeflow\n- サードパーティツール(FiveTranなど)\n- RestAPI\n- JDBC\n\nデータ変換(T)の方法としては以下が挙げられます:\n- dbt\n- DLT(Delta Live Tables)\n- DBSQL\n- PySpark\n- GUIベースのサードパーティツール\n\nこれらの方法を組み合わせることで、効率的なELTプロセスを構築することができます。"
                }
            },
            "retrievedReferences": [
                {
                    "content": {
                        "text": "● dbt-project-evaluatorでベストプラクティスをチェックしてみましょう。©2024 Databricks Inc. — All rights reserved          dbtとDLTの使い分け©2024 Databricks Inc. — All rights reserved     DatabricksでのELT⽅法⼀覧     データ取込み⽅法(EL)     ● Autoloader/COPY INTO (ファイルから)     ● フェデレーション ● Delta Sharing ● Lakeflow ● 3rd Partyツール     (FiveTranなど) ● RestAPI ● JDBC     データ変換⽅法(T)     ● dbt ● DLT ● DBSQL ● pyspark ● GUIベースの     3rd Partyツール©2024 Databricks Inc. — All rights reserved     ● 「どう実現するか」を抽象化し「何を実現するか」を 定義する宣⾔型開発。抽象化の例:     ○ ファイルのステート管理 ○ 依存関係‧並列性 ○ 差分処理‧SCD type2"
                    },
                    "location": {
                        "s3Location": {
                            "uri": "s3://バケット名/ファイル名.pdf"
                        },
                        "type": "S3"
                    },
                    "metadata": {
                        "data_category": "Tech_Data",
                        "description": "AWSの設定",
                        "created_at": 20241115,
                        "access_scope": "all",
                        "owner_id": "id000001"
                    }
                }
            ]
        },
        {
            "generatedResponsePart": {
                "textResponsePart": {
                    "span": {
                        "end": 687,
                        "start": 344
                    },
                    "text": "また、Databricksでは特にストリーミングテーブル(ST)とマテリアライズドビュー(MV)という2つの重要な概念があります。\n\nストリーミングテーブルは、クラウドストレージやKafka、Kinesisなどの追加オンリーのデータソースから読み込みます。これは大量データの取り込み、低レイテンシーの変換処理、バッチ方式のデータ取り込みに適しています。\n\nマテリアライズドビューは、クエリ結果をDeltaテーブルに格納するビューです。差分のみを自動検出して同期するため、コストと性能の両立が可能です。通常のデータ変換、集計テーブルの構築、BIのクエリとレポートの高速化に適しています。\n\nこれらの機能を適切に組み合わせることで、効率的かつ柔軟なデータパイプラインを構築することができます。"
                }
            },
            "retrievedReferences": [
                {
                    "content": {
                        "text": "..©2024 Databricks Inc. — All rights reserved     Streaming TableとMaterialized View     27     ストリーミングテーブル(ST)     追加オンリーのデータソースから読み 込む。(クラウドストレージ ‧Kafka‧Kinesisなどから)     ⽤途: • ⼤量データの取込み • 低レーテンシーの変換処理 • バッチ⽅式のデータ取込も可     マテリアライズドビュー(MV)     クエリーの結果をDeltaテーブルに格 納されるビュー。差分だけ⾃動検出し 同期するため、コストと性能が両⽴     ⽤途: • 通常のデータの変換 • 集計テーブルの構築 • BIのクエリーとレポートの⾼速化"
                    },
                    "location": {
                        "s3Location": {
                            "uri": "s3://バケット名/ファイル名.pdf"
                        },
                        "type": "S3"
                    },
                    "metadata": {
                        "data_category": "Tech_Data",
                        "description": "AWSの設定",
                        "created_at": 20241115,
                        "access_scope": "all",
                        "owner_id": "id000001"
                    }
                }
            ]
        }
    ],
    "output": {
        "text": "Databricksでは、データの取り込み(EL)と変換(T)に様々な方法を組み合わせて使用することができます。\n\nデータ取り込み(EL)の方法には以下のようなものがあります:\n- Autoloader/COPY INTO(ファイルからの取り込み)\n- フェデレーション\n- Delta Sharing\n- Lakeflow\n- サードパーティツール(FiveTranなど)\n- RestAPI\n- JDBC\n\nデータ変換(T)の方法としては以下が挙げられます:\n- dbt\n- DLT(Delta Live Tables)\n- DBSQL\n- PySpark\n- GUIベースのサードパーティツール\n\nこれらの方法を組み合わせることで、効率的なELTプロセスを構築することができます。 また、Databricksでは特にストリーミングテーブル(ST)とマテリアライズドビュー(MV)という2つの重要な概念があります。\n\nストリーミングテーブルは、クラウドストレージやKafka、Kinesisなどの追加オンリーのデータソースから読み込みます。これは大量データの取り込み、低レイテンシーの変換処理、バッチ方式のデータ取り込みに適しています。\n\nマテリアライズドビューは、クエリ結果をDeltaテーブルに格納するビューです。差分のみを自動検出して同期するため、コストと性能の両立が可能です。通常のデータ変換、集計テーブルの構築、BIのクエリとレポートの高速化に適しています。\n\nこれらの機能を適切に組み合わせることで、効率的かつ柔軟なデータパイプラインを構築することができます。"
    },
    "sessionId": "4ccc50e8-e648-421f-af69-10415b0b4703"
}

LLMの最終回答生成部のみピックアップ

Databricksでは、データの取り込み(EL)と変換(T)に様々な方法を組み合わせて使用することができます。

データ取り込み(EL)の方法には以下のようなものがあります:
- Autoloader/COPY INTO(ファイルからの取り込み)
- フェデレーション
- Delta Sharing
- Lakeflow
- サードパーティツール(FiveTranなど)
- RestAPI
- JDBC

データ変換(T)の方法としては以下が挙げられます:
- dbt
- DLT(Delta Live Tables)
- DBSQL
- PySpark
- GUIベースのサードパーティツール

これらの方法を組み合わせることで、効率的なELTプロセスを構築することができます。 また、Databricksでは特にストリーミングテーブル(ST)とマテリアライズドビュー(MV)という2つの重要な概念があります。

ストリーミングテーブルは、クラウドストレージやKafka、Kinesisなどの追加オンリーのデータソースから読み込みます。これは大量データの取り込み、低レイテンシーの変換処理、バッチ方式のデータ取り込みに適しています。

マテリアライズドビューは、クエリ結果をDeltaテーブルに格納するビューです。差分のみを自動検出して同期するため、コストと性能の両立が可能です。通常のデータ変換、集計テーブルの構築、BIのクエリとレポートの高速化に適しています。

これらの機能を適切に組み合わせることで、効率的かつ柔軟なデータパイプラインを構築することができます。


いいなと思ったら応援しよう!