データレイクの列指向変換とパーティション設計
全国配送を手がける物流企業が、配送実績を 1 日あたり約 4,000 万行の CSV ファイルとして Amazon S3 に蓄積しています。分析チームは Amazon Athena で「特定期間・特定営業所の配送遅延件数」といったアドホック集計を実行していますが、クエリが数分かかるうえスキャン量に応じた料金が想定を大きく超えています。分析対象になるのは全カラムのうち数個だけで、ほぼすべてのクエリが配送日で絞り込まれます。最も効果的な改善策はどれですか。
解説を読む(正解: A)
Amazon Athena は S3 上のデータをスキャンしたバイト数に応じて課金されるため、性能とコストの両方がデータフォーマットとレイアウトに直結します。Apache Parquet のような列指向フォーマットは、クエリが参照するカラムのブロックだけを読み出すため、数十カラムのうち数個しか使わないワークロードではスキャン量を大幅に削減できます。さらに配送日でパーティションを切っておけば、パーティションプルーニングによって対象期間外のオブジェクトは読み込まれません。AWS Glue の ETL ジョブはこの CSV から Parquet への変換とパーティション書き出しをサーバーレスで実行でき、Glue Data Catalog にスキーマを登録すれば Athena がそのまま参照できます。したがって A が最適です。B の gzip は転送量こそ減りますが行指向のままで不要カラムも読み込まれ、かつ gzip は分割不能なため並列処理が効かず性能が悪化することもあります。C の EMR 常時起動はクラスター費用が継続的に発生し、CSV のままではスキャン量の問題も解決しません。D の Redshift への全面移行はアドホック分析のために専用クラスターを維持することになり、データレイク上での柔軟な分析という要件に対して過剰かつ高コストです。
データレイクの外部共有と機密データの検出
製薬企業が、Amazon S3 を基盤とし AWS Lake Formation で権限管理を行うデータレイクに、臨床試験の解析データを集約しています。今後はこのデータの一部を、組織外の共同研究先企業へ提供する計画があります。あわせて、データレイクに取り込まれるファイルの中に患者の個人情報などの機密データが混在していないかを検出し、別管理したいという要件もあります。
これらの要件を満たすソリューションを 2 つ選択してください。
複数選択問題です (正解 2 つ)。選んでから判定してください。
解説を読む(正解: A、B)
AWS Lake Formation は S3 上のデータレイクに対して、テーブルや列、行、タグの単位で一元的にアクセス許可を管理するサービスです。ただし Lake Formation の権限付与は基本的に AWS アカウントや AWS Organizations の範囲を対象とするため、組織外の第三者へデータを提供する場合には AWS Data Exchange を利用します。Data Exchange はデータセットの公開・購読・課金・配信を扱うサービスで、Lake Formation と連携させることで、レイク上のテーブルに対する権限を保ったまま外部企業へデータを提供できます。これが A です。機密データの識別には AWS Glue の機密データ検出機能を使います。Glue の ETL ジョブ内で個人情報などのパターンを検出し、検出結果の出力やマスキング・置換といった処理につなげられるため、取り込み経路の中で機密データを分離管理できます。これが B です。C の AWS Secrets Manager は、データベース認証情報や API キーといったシークレットを安全に保管しローテーションするサービスであり、データの中身を走査して機密情報を検出する機能はありません。D は誤りで、AWS Data Exchange はデータの共有・流通のためのサービスであり、機密データをスキャンする機能は提供していません。E も不適切で、Amazon S3 は VPC ピアリング越しにファイルシステムとしてマウントするようなサービスではなく、この方法では提供範囲の制御や利用条件の管理といったガバナンスも実現できません。
データレイクのクエリ性能とスキャン量の最適化
全国展開する小売チェーンの分析基盤では、POS ログを 1 日あたり約 3 TB、gzip 圧縮した CSV ファイルとして Amazon S3 の単一プレフィックス配下に蓄積しています。アナリストは Amazon Athena で分析していますが、1 クエリに数十分かかり、スキャンしたデータ量に応じた課金も膨らんでいます。実際のクエリの大半は「特定の日付範囲」の「特定の店舗」について「売上金額など数列だけ」を集計するものです。運用負荷を大きく増やさずにクエリ性能とコストを改善する対策を 2 つ選択してください。
複数選択問題です (正解 2 つ)。選んでから判定してください。
解説を読む(正解: A、B)
Amazon Athena は S3 上のデータを直接スキャンして課金する仕組みのため、性能とコストはどちらも「読まずに済むデータをどれだけ増やせるか」で決まります。これを実現する二本柱が、列指向フォーマットへの変換とパーティショニングです。A の Apache Parquet は列単位でデータを格納し列ごとに圧縮するため、数列だけを集計するクエリでは不要な列を物理的に読み飛ばせ、統計情報による述語プッシュダウンも効きます。B のパーティショニングは、日付や地域を S3 のプレフィックス階層に埋め込んで Glue Data Catalog に登録することで、WHERE 句で指定された日付範囲や店舗地域に該当するプレフィックスだけを読む「パーティションプルーニング」を可能にします。この 2 つを併用すると、スキャン量が桁違いに減り、実行時間と課金の両方が改善します。C のクエリ結果の再利用は、まったく同じ SQL を繰り返す場合にのみ効く限定的な最適化であり、日付や店舗を変えながら探索するアナリストの利用形態では大半のクエリが対象外となるため、根本改善にはなりません。D の S3 Standard-IA への変更は保管コストのみに作用し、Athena のスキャン量課金やクエリ時間は変わらないうえ、頻繁なアクセスでは取り出しリクエスト料金がかさむ可能性があります。E はファイルを結合しても列指向でもパーティション化でもないためスキャン量は減らず、S3 Transfer Acceleration はインターネット経由のアップロード高速化機能であって、AWS 内部からのクエリ性能とは無関係です。