Upgrade to Pro — share decks privately, control downloads, hide ads and more …

RedshiftのサーチパスとDBメンテ

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

 RedshiftのサーチパスとDBメンテ

Avatar for NaoyaYamamoto

NaoyaYamamoto

August 04, 2024
Tweet

More Decks by NaoyaYamamoto

Other Decks in Technology

Transcript

  1. 自己紹介 名前:山本 直弥 所属:株式会社シーイーシー 2023-2024 Japan AWS All Certifications Engineer

    好きなAWSサービス: AWS Lambda AWS Step Functions Amazon Redshift 1 © Computer Engineering & Consulting Ltd. All rights reserved. X:@Nao_Engineer_AC
  2. 課題:テーブルのデータを入れ替えるには? 2 © Computer Engineering & Consulting Ltd. All rights

    reserved. <システム> ・24時間稼働のWebシステムがRedshiftのデータを参照している <やりたいこと> ・S3にあるCSVファイルの内容でテーブルの内容を手動かバッチ処理で入れ替えたい ・ユーザはWebアプリケーションでテーブルの内容を参照しており、 データ入れ替え中(空の状態やデータ登録失敗)の状態を見せたくない ずっとテーブルの中身見るよ 変なデータ見えたら困るな データ入れ替えたい・・・ ユーザ エンジニア や 夜間バッチ Select * from テーブル名
  3. 解決案:サーチパスを使う 3 © Computer Engineering & Consulting Ltd. All rights

    reserved. [サーチパスの確認] show search_path [サーチパスの変更] alter user [ユーザ] set search_path to [スキーマ1,スキーマ2] 例: [サーチパス]公開スキーマ,非公開スキーマ SELECT * FROM テーブルA; →(公開スキーマの)テーブルA ※同名テーブルは最初に書かれたスキーマを優先し て検索する SELECT * FROM 非公開スキーマ.テーブルB; → (非公開スキーマの)テーブルB ※スキーマを指定してテーブル参照も可能 SELECT * FROM テーブルD; →(非公開スキーマの)テーブルD ※テーブルがある最初のスキーマを参照する ◼ サーチパスとは? → スキーマ参照の優先順位
  4. ステップ1:非公開スキーマのデータを入れ替える 4 © Computer Engineering & Consulting Ltd. All rights

    reserved. <ポイント> ・ユーザは公開スキーマを参照しているので、非公開スキーマのテーブルを更新しても ユーザに影響はない 公開スキーマのテーブ ルが見えているよ 非公開スキーマのテーブ ルを更新するで ユーザ [サーチパス] 公開スキーマ,非公開スキーマ Select * from テーブル名
  5. ステップ2:サーチパスを非公開スキーマ優先に変更 5 © Computer Engineering & Consulting Ltd. All rights

    reserved. <ポイント> ・非公開スキーマのデータメンテ結果のチェックが完了したらサーチパスを非公開優先にする ・サーチパスの変更だけでユーザーに最新データを提供できる データが最新になったね ありがとう データチェックしたから 一旦非公開スキーマみてて ユーザ [サーチパス] 非公開スキーマ,公開スキーマ Select * from テーブル名
  6. ステップ3:公開スキーマのデータを入れ替える 6 © Computer Engineering & Consulting Ltd. All rights

    reserved. <ポイント> ・ユーザは非公開スキーマを参照しているので、公開スキーマのテーブルを更新しても ユーザに影響はない ・非公開スキーマのデータや定義を公開スキーマにコピーしたりする 非公開スキーマ見ているよ 非公開スキーマ見られてい るうちに公開スキーマを メンテするで ユーザ [サーチパス] 非公開スキーマ,公開スキーマ Select * from テーブル名
  7. ステップ4:サーチパスを公開スキーマ優先に戻す 7 © Computer Engineering & Consulting Ltd. All rights

    reserved. <ポイント> ・公開スキーマに非公開スキーマのデータや定義を反映できたら元に戻す ・次回のメンテ時も各ステップを実施する 公開スキーマのテーブ ルが見えているよ メンテ終わったから サーチパス戻しといたで ユーザ [サーチパス] 公開スキーマ,非公開スキーマ Select * from テーブル名
  8. 補足:Sfnで一連の処理をつないでバッチ処理も可 8 © Computer Engineering & Consulting Ltd. All rights

    reserved. ◼ 各処理の概要例 ①今回の更新テーブルを外部パラメータで取得 →これがないと全テーブル同期することになる ②メインスキーマのデータをサブスキーマに同期 →画面側で更新されたデータを取り込む ③データ分析や取込み処理 ④③の処理内容をチェック。 →問題があれば処理を止めてエラー通知 ⑤サーチパスをサブスキーマ優先に変更 →メインスキーマ更新中の画面影響をなくす ⑥サブスキーマの更新内容をメインスキーマに同期 ⑦サーチパスをメインスキーマ優先に変更 →通常のサーチパスに戻す ① ③ ② ④ ⑤ ⑥ ⑦
  9. 9 © Computer Engineering & Consulting Ltd. All rights reserved.

    ご清聴ありがとうございました