テーマ切替
模擬試験|Associate(45問 / 90分)
本番形式の模擬試験です。05_practice-questions/associate/ の確認問題とは問題が重複しません。 セクション別の確認問題と違い、出題順はドメイン横断でランダム、問題数は配点比例、そして時間を計って解くことが目的です。
受験ルール(本番と同じ条件で)
| 項目 | 設定 |
|---|---|
| 問題数 | 45 問 |
| 制限時間 | 90 分(1 問あたり約 2 分) |
| 合格ライン | 70% 以上 = 32 問正解 |
| 教材参照 | 禁止(解き終わるまで開かない) |
| 迷った問題 | 番号をメモして後回し。全問到達を優先 |
- タイマーを 90 分にセットする
- 「問題」だけを見て 45 問を解き、解答をメモに書き出す(
Q1: Bの形式) - 時間が来たら手を止める
- 「解答一覧」で自己採点し、「採点表」でドメイン別の正答率を出す
- 弱点ドメインの教材・確認問題・ハンズオン課題に戻る
出題数の配分(ロードマップの配点目安に比例)
| セクション | 配点目安 | 本模試の問題数 |
|---|---|---|
| ③ データ変換・モデリング(PySpark / SQL) | 30% | 13 問 |
| ② データ取り込み | 15% | 7 問 |
| ④ Lakeflow Jobs | 15% | 7 問 |
| ⑤ ガバナンス・セキュリティ | 15% | 7 問 |
| ⑥ トラブルシューティング・最適化 | 12% | 5 問 |
| ⑦ CI/CD | 8% | 4 問 |
| ① プラットフォーム基礎 | 5% | 2 問 |
| 合計 | 100% | 45 問 |
問題
Q1. PySpark の filter() と where()、および複合条件の書き方について正しいものはどれか。
- A.
filter()は行のフィルタリング、where()は列のフィルタリングに使い、用途が異なる - B.
filter()とwhere()は完全に同義(パフォーマンス・構文とも差がない)。複合条件は&(AND)/|(OR)で結合し、演算子の優先順位のため各条件を括弧で囲む必要がある - C.
where()の方が最適化が効くため、本番コードではwhere()を使うべきである - D. 複合条件は
and/orキーワードで結合し、括弧は不要である
Q2. アナリストグループに GRANT SELECT ON CATALOG main TO \analysts`` を実行した。この結果として正しいものはどれか。
- A. 実行時点で
mainに存在するテーブルのみ読めるようになり、将来作成されるテーブルは読めない - B. カタログレベルの
SELECTは無効で、テーブルごとに付与しなければならない - C. 特権の継承により、
main内の現在および将来のすべてのテーブル/ビューを読めるようになる(適切なUSE CATALOG/USE SCHEMAが前提)。カタログ/スキーマレベルの付与は広範になるため最小特権の原則に注意する - D.
SELECTはメタストアレベルの特権なので、この文は構文エラーになる
Q3. Auto Loader の cloudFiles.schemaEvolutionMode について、rescue と failOnNewColumns の違いとして正しいものはどれか。
- A.
rescueはスキーマを進化させず失敗もせず、新列はすべて_rescued_dataに記録される。failOnNewColumnsはスキーマ更新または問題ファイルの削除まで失敗し、自動更新も再起動もしない - B.
rescueは新列検出時にストリームを失敗させ、failOnNewColumnsは新列を無視する - C. どちらも新列をスキーマに追加してから
UnknownFieldExceptionで失敗する - D.
rescueはスキーマを進化させて処理を続行し、failOnNewColumnsは新列を_rescued_dataへ入れる
Q4. Lakeflow ジョブのトリガーを「時間ベース」と「イベントベース」に分類したとき、正しい組み合わせはどれか。
- A. 時間ベース = スケジュール済み・継続的 / イベントベース = ファイルの到着・手動
- B. 時間ベース = ファイルの到着・テーブルの更新 / イベントベース = スケジュール済み
- C. すべてのトリガーは時間ベースであり、イベントベースのトリガーは存在しない
- D. 時間ベース = スケジュール済み(cron) / イベントベース = ファイルの到着・テーブルの更新・モデルの更新。ほかに継続的(Continuous)(常時実行)と**なし(手動)**がある
Q5. 「自動圧縮(Auto Compaction)」と「最適化された書き込み(Optimized Writes)」の違いとして正しいものはどれか。
- A. 自動圧縮は書き込み前にシャッフルしてファイルサイズを整え、最適化された書き込みは書き込み後に小ファイルを結合する
- B. 自動圧縮は書き込み成功後に、その書き込みを実行したクラスター上で同期的に小ファイルを結合する(未圧縮ファイルのみ)。最適化された書き込みは書き込み前にデータをシャッフルしてファイルサイズを改善する(パーティションテーブルで特に有効)
- C. 両者は同じ機能の別名であり、テーブルプロパティ名が違うだけである
- D. どちらも
OPTIMIZEの完全な代替であり、OPTIMIZEのスケジュール実行は不要になる
Q6. DataFrame 内で SQL 式を使う 3 つの方法について、正しい説明はどれか。
- A.
selectExpr()は SQL 文全体を実行し、expr()はテーブルを作成する - B. DataFrame API では SQL 式は一切使えず、
spark.sql()で書き直す必要がある - C.
selectExpr("Count", "upper(County) as big_name")は SQL 式を受け取るselectのバリエーション、expr("lower(County) as little_name")は列を指定する任意の場所で SQL 構文を使う関数、spark.sql("SELECT ...")は任意の SQL クエリを実行する - D.
expr()は文字列を返すだけで、列としては使えない
Q7. バンドルで databricks bundle run の対象を指定する方法として正しいものはどれか。
- A.
resources配下のジョブ/パイプラインの最上位キー(リソースキー) を指定する。例:resources.jobs.hello_jobならdatabricks bundle run hello_job。ターゲットは-t(--target)で指定する - B. ジョブの
nameプロパティの値を指定する - C. ワークスペース上のジョブ ID(数値)を指定する
- D. ノートブックのパスを指定する
Q8. Auto Loader で「.png ファイルだけを取り込みたい」。正しい指定方法はどれか。
- A.
.load("/Volumes/.../*.png")のようにパスの末尾に glob を書く - B.
.option("cloudFiles.format", "png")を指定する - C.
.option("cloudFiles.fileSuffix", ".png")を指定する - D. サフィックスフィルタは
pathでは指定できないため、.option("pathGlobFilter", "*.png")を使う。path(.load(...))で指定できるのはプレフィックスフィルタ。なお Auto Loader の既定 glob 動作は他の Spark ファイルソースと異なるため、標準に揃えたい場合はcloudFiles.useStrictGlobberをtrueにする
Q9. CTAS・CREATE TABLE LIKE・CLONE の違いとして正しいものはどれか。
- A.
CREATE TABLE LIKEは定義とデータの両方をコピーする - B.
CLONEは定義のみをコピーし、データは一切参照しない - C.
CTAS(CREATE TABLE AS SELECT) はクエリ結果から新テーブルを作る。CREATE TABLE LIKEはデータではなく定義(スキーマ)だけをコピーする。CLONEは Delta テーブルの複製で、ディープクローンは定義とデータを含む完全独立コピー、浅いクローンは定義のみコピーし初期データは元テーブルのストレージを参照する - D.
CTASはスキーマだけを作り、データは別途INSERTする必要がある
Q10. ALL PRIVILEGES について正しい説明はどれか。
- A. 名前のとおり、そのオブジェクトに適用可能なすべての特権を含む(例外はない)
- B. 各オブジェクト型に適用可能なすべての特権を暗黙的に意味する特権だが、
MANAGE・EXTERNAL USE SCHEMA・EXTERNAL USE LOCATIONは含まれない(意図しないデータ流出・特権エスカレーションの防止)。テーブルならSELECT+MODIFY+APPLY TAGを意味する - C.
ALL PRIVILEGESを付与すると個別特権も明示的に付与された状態になり、SHOW GRANTSに個別に表示される - D.
ALL PRIVILEGESはメタストアにのみ付与できる
Q11. Lakeflow ジョブの制限値として正しいものはどれか。
- A. 1 ジョブに含められるタスクは最大 100 で、1 ワークスペースに保存できるジョブは 1,000
- B. タスクの同時実行数に上限はなく、要求すればすべて即座に開始される
- C. 1 ジョブのタスクは最大 10,000、ジョブパラメータは 1,000 文字まで
- D. 1 ワークスペースのタスク同時実行は 2,000(超過すると
429 Too Many Requests)、1 時間あたりのジョブ作成は 10,000、保存できるジョブは最大 10,000、1 ジョブのタスクは最大 1,000、動的値を使う場合のジョブパラメータは 10,000 文字まで
Q12. Delta Lake の楽観的並行性制御(Optimistic Concurrency Control)と分離レベルについて、正しい説明はどれか。
- A. 書き込みは「読み取り → 書き込み → 検証とコミット」の 3 段階で動作し、検証時に他の書き込みと競合していれば同時変更例外で失敗する。既定では書き込みは書き込みシリアライザブル分離、読み取りはスナップショット分離。ロックを使わないためデッドロックが起きない
- B. 悲観的ロックを取得するため、競合する書き込みは順番待ちになりデッドロックが起こりうる
- C. 既定では読み取りが書き込みシリアライザブル、書き込みがスナップショット分離である
- D. 追加のみ(append-only)の書き込みでも、必ず事前にテーブル全体を読み取る必要がある
Q13. MERGE INTO で UPDATE SET * EXCEPT (last_updated) を使ったときの挙動として正しいものはどれか。
- A.
last_updated列だけが更新され、他の列は変更されない - B.
EXCEPTはMERGEでは使えず構文エラーになる - C.
last_updatedを除外して残りの全列をcol = source.colで更新し、除外した列はnullに設定される(DBR 12.2 LTS 以上。スキーマ進化有効時は挙動が変わる) - D.
last_updated列は元の値のまま保持され、他の列が更新される
Q14. 3 種類のキャッシュの使い分けとして正しいものはどれか。
- A. Spark キャッシュ(
.persist())を積極的に使うのが Databricks の推奨である - B. ディスクキャッシュ(旧 Delta キャッシュ)はローカル SSD に Parquet のコピーを保持し、SSD ボリュームのワーカータイプを選ぶだけで有効化できるため最も簡単で推奨。Spark キャッシュ(
.persist()/.unpersist())はサブクエリ結果も保持できるが誤用でメモリを食い遅くなるため原則避ける。クエリ結果キャッシュは SQL ウェアハウスのクラスター単位で、決定論的クエリ(NOW()等を避ける)で基のデータが未変更なら結果を直接返す - C. ディスクキャッシュは任意のサブクエリ結果を保存できる
- D. クエリ結果キャッシュは
NOW()を含むクエリでも効く
Q15. COPY INTO の FORMAT_OPTIONS('mergeSchema'='true') と COPY_OPTIONS('mergeSchema'='true') の違いとして正しいものはどれか。
- A. どちらも同じ意味で、片方を指定すれば十分である
- B.
FORMAT_OPTIONS側はターゲットテーブルのスキーマを展開し、COPY_OPTIONS側はソースファイル間でスキーマをマージする - C.
COPY_OPTIONSにmergeSchemaは存在しない - D.
FORMAT_OPTIONSのmergeSchemaは複数のソースファイル間でスキーマをマージして推論するリーダー側の設定、COPY_OPTIONSのmergeSchema(既定 false)はターゲット Delta テーブル側のスキーマ展開の可否。スキーマレステーブルへ推論ロードするには両方指定する
Q16. UDF を使うべき場面と、組み込み関数を優先すべき場面の判断として正しいものはどれか。
- A. UDF が向くのは組み込みの Apache Spark 関数では表現困難なロジック(アドホッククエリ、手動データクリーニング、探索的データ分析、小〜中規模データセット。代表例は暗号化・復号・ハッシュ・JSON 解析・検証)。組み込み関数/Spark メソッドが向くのは大規模データセット、ETL ジョブ、ストリーミングなど定期的・継続的に実行されるワークロード(分散処理向けに最適化されている)
- B. UDF は常に組み込み関数より高速なので、可能な限り UDF に置き換えるべきである
- C. 組み込み関数は小規模データ専用で、大規模データには UDF を使う
- D. pandas UDF は組み込み関数より高速なので、大規模 ETL では pandas UDF を第一候補にする
Q17. Lakeflow 宣言型パイプラインのソースコードについて、正しい説明はどれか。
- A. 1 つのソースファイル内で Python と SQL を混在させられる
- B. パイプラインには 1 つのソースファイルしか登録できない
- C. 各ソースファイルは 1 言語のみ(Python または SQL)だが、言語ごとのファイルを複数まとめて 1 つのパイプラインにできる。既定では
transformationsフォルダー内のすべての*.py/*.sqlがパイプラインのソースの一部になり、explorationsフォルダーはアドホック分析用で既定ではパイプライン更新の一部として実行されない - D. ソースコードから依存関係を手動で宣言する必要があり、DAG は自動生成されない
Q18. マネージドボリュームと外部ボリュームの違いとして正しいものはどれか。
- A. マネージドボリュームは既存のクラウドストレージパスに対して登録し、外部ボリュームは UC マネージドストレージ内に作成される
- B. マネージドボリュームはスキーマの UC マネージドストレージ内に作成され、UC がレイアウトと削除を管理し、すべてのアクセスが UC 経由になる(Databricks 専用ワークロードで最も簡単な選択)。外部ボリュームは既存のクラウドオブジェクトストレージパスに対して登録し、ボリューム削除後もデータはクラウドストレージに残り、外部ツールは直接 URI を利用できる(UC ガバナンスをバイパスできるため追加のガバナンスが必要)
- C. 外部ボリュームを使うにはデータを一度 Databricks へ移行する必要がある
- D. マネージド/外部の区別はボリュームには適用されず、テーブルのみに適用される
Q19. MERGE INTO の WHEN NOT MATCHED BY SOURCE について、正しい説明はどれか。
- A. ソースにあってターゲットにない行を挿入する句である
- B. 使えるアクションは
INSERTのみである - C. 条件を省略しても対象は自動的に最小化されるため、パフォーマンス上の懸念はない
- D. ターゲット行がソースのどの行にも一致しない場合に実行され(DBR 12.2 LTS 以上)、アクションは
DELETE/UPDATE SET col = expr。条件・アクションの式はターゲットテーブルの列のみ参照可(ソース行が存在しないため)。条件を省略すると大量のターゲット行が変更され得るので、パフォーマンスのため条件で対象を限定する
Q20. Databricks の Git フォルダーで Git 資格情報が必要になる場面として正しいものはどれか。
- A. プライベートリポジトリまたは書き込み操作(commit / push)には Git プロバイダーの PAT または OAuth 資格情報が必要。パブリックリポジトリの読み取りのみなら資格情報は不要。各ユーザーは最大 10 個の資格情報を保存でき、プロバイダーごとに既定の資格情報が 1 つ決まる
- B. どのような操作でも必ず Git 資格情報が必要である
- C. Git 資格情報はワークスペース管理者が 1 つだけ登録し、全ユーザーで共有する
- D. Databricks は Git プロバイダーの資格情報を使わず、Databricks の PAT で Git にアクセスする
Q21. Auto Loader が、ファイルソースへの直接 Structured Streaming(spark.readStream.format(fileFormat).load(dir))より優れる点として、教材が挙げている 4 点はどれか。
- A. トランザクション性・ACID・タイムトラベル・スキーマ適用
- B. SQL サポート・可視化・ダッシュボード・アラート
- C. スケーラビリティ(数十億ファイルを効率検出、バックフィルを非同期実行可)、パフォーマンス(検出コストがディレクトリ数ではなく取り込むファイル数に比例)、スキーマ推論と進化のサポート(スキーマドリフトを検出し通知)、コスト(ネイティブクラウド API で列挙し、ファイル通知モードならディレクトリ列挙自体を回避)
- D. 順序保証・完全一致セマンティクス・自動リトライ・自動スケール
Q22. アダプティブクエリ実行(AQE)の 4 つの主要機能として正しいものはどれか。
- A. データスキップ・動的ファイルプルーニング・低シャッフルマージ・ディスクキャッシュ
- B. ①ソートマージ結合をブロードキャストハッシュ結合に動的変更、②シャッフル交換後にパーティションを動的に結合(小さいパーティションを合理的サイズに)、③スキューを動的に処理(偏ったタスクをほぼ均等サイズに分割・必要ならレプリケート)、④空リレーションを動的に検出して伝播
- C. OPTIMIZE・VACUUM・ANALYZE・クラスタリングの自動実行
- D. Photon による高速化・Spark キャッシュ・クエリ結果キャッシュ・SQL UI キャッシュ
Q23. メダリオンアーキテクチャの Bronze 層の設計指針として、教材が推奨しているものはどれか。
- A. すべてのフィールドを厳密な型(
INT/TIMESTAMP等)にキャストしてから保存する - B. 集計済みのデータのみを保持し、生データは破棄する
- C. アナリストが直接クエリして分析することを主目的に設計する
- D. データ欠落を防ぎ予期しないスキーマ変更から保護するため、ほとんどのフィールドを STRING、VARIANT、または BINARY として格納することを推奨する。またデータの実績やソースなどのメタデータ列(例:
_metadata.file_name)を追加することがある。生の状態を元の形式で保存し、すべての履歴データを保持して再処理と監査を可能にする
Q24. Expectations の warn / drop のメトリックを確認する方法として正しいものはどれか。
- A. パイプライン UI の**[データ品質]タブ**で確認する(サイドバーの[ジョブ & パイプライン]→ パイプライン名 → 期待値が定義されたデータセット → 右サイドバーの[データ品質]タブ)。ただし Databricks SQL で作成したスタンドアロンパイプラインでは[データ品質]タブが使えず、イベントログにクエリしてメトリックを取得する
- B.
DESCRIBE HISTORYで確認する - C.
system.access.auditシステムテーブルで確認する - D. fail のメトリックも同じ[データ品質]タブで確認できる
Q25. Unity Catalog の BROWSE 特権について正しい説明はどれか。
- A.
BROWSEはテーブルのデータを読み取る特権で、SELECTの代替として使える - B.
BROWSEを使うには先にUSE CATALOGとUSE SCHEMAが必要である - C.
USE CATALOG/USE SCHEMAなしに、データにアクセスせずオブジェクトのメタデータを発見・表示し、アクセスを要求できる特権。カタログレベルで付与し、Databricks はAll account usersグループへの付与を推奨している - D.
BROWSEはスキーマレベルにのみ付与できる
Q26. メダリオンアーキテクチャの Silver 層について、教材の記述として正しいものはどれか。
- A. 取り込み(インジェスト)から直接 Silver に書き込むのが最も効率的である
- B. 1 つ以上の Bronze / Silver テーブルから読み取って Silver に書く。取り込みから直接 Silver に書くのは非推奨(スキーマ変更や破損レコードでエラーになるため)。すべてのソースが追加専用と仮定し、Bronze からの読み取りはほとんどストリーミング読み取りで構成する(バッチ読み取りは小さなディメンションテーブルに限定)。各レコードの検証済み・非集計表現を少なくとも 1 つ含む
- C. Silver 層には集計表現のみを置き、非集計の表現は Bronze に残す
- D. Silver 層ではデータモデリングを行わず、Gold 層で初めて正規化する
Q27. 空のスキーマレス Delta テーブル(列定義なしで作成したテーブル)について正しい説明はどれか。
- A.
INSERT INTOでデータを入れれば自動的にスキーマが決まる - B.
MERGE INTOのターゲットとして使えば、ソースのスキーマが自動適用される - C. 空のスキーマレステーブルは作成自体ができない
- D. 空のスキーマレステーブルには
COPY INTOでのみ書き込める(INSERT INTO/MERGE INTOはスキーマレステーブルへ書き込めない)。DBR 11.3 LTS 以降、スキーマ展開に対応する形式ではFORMAT_OPTIONS('mergeSchema'='true')+COPY_OPTIONS('mergeSchema'='true')で推論ロードでき、データが入るとクエリ可能になる
Q28. Databricks の主キー・外部キー制約と DBFS について、正しい説明はどれか。
- A. 主キー・外部キー関係は情報(informational)であり強制(enforce)されない。また DBFS ルート/マウント経由の保存・アクセスは非推奨で、アクセス管理は Unity Catalog を使うことが推奨される
- B. 主キー制約は強制されるため、重複キーの挿入は必ず失敗する
- C. 外部キー制約により参照整合性が保証されるため、
MERGEでの整合性チェックは不要になる - D. DBFS ルートは推奨される保存場所で、Unity Catalog のボリュームより優先すべきである
Q29. ビューの種類と権限について正しい説明はどれか。
- A.
TEMPORARY VIEWはセッションをまたいで永続化され、catalog.schema.nameで修飾できる - B.
TEMPORARY VIEWは作成したセッション内でのみ可視でセッション終了時に削除され、名前を修飾できない。GLOBAL TEMPORARY VIEWはシステムが保持する一時スキーマglobal_tempに関連付けられる。CREATE OR REPLACE VIEWは同名ビューを置換するが、置換すると元の権限は保持されない。IF NOT EXISTSとOR REPLACEは同時指定できない - C.
GLOBAL TEMPORARY VIEWはdefaultスキーマに作られる - D.
CREATE OR REPLACE VIEWは元のビューの権限をすべて自動的に引き継ぐ
Q30. 複数の期待値をまとめて 1 つの集合アクションで適用する方法について正しいものはどれか。
- A. SQL の
CONSTRAINT ... EXPECT (...) ON VIOLATION GROUP DROPで指定する - B. SQL でも Python でも同じように辞書を渡して指定できる
- C. Python 限定の
expect_all/expect_all_or_drop/expect_all_or_failを使い、引数に「名前 → 制約」の辞書を渡す。同じルールセットを複数データセットで再利用できる。SQL は複数のCONSTRAINTをカンマ区切りで並べるだけでグループ化・集合アクションはできない - D. SQL 限定の機能で、Python では個別のデコレーターしか使えない
Q31. OPTIMIZE FULL を実行すべき場面として正しいものはどれか。
- A. クラスタリングを初めて有効化したとき、またはクラスタリングキーを変更したとき。既定では過去に書き込まれたデータにクラスタリングは適用されないため、
OPTIMIZE FULLで全レコードの再クラスタリングを強制する。以前にOPTIMIZE FULLを実行済みでキー変更がなければ、OPTIMIZE FULLは通常のOPTIMIZE(増分)と同じ動作になる - B. 毎回の
OPTIMIZEの代わりに常にOPTIMIZE FULLを使うのが推奨である - C.
VACUUMの前に必ず実行する必要がある - D. パーティションテーブルで小ファイルを圧縮したいとき
Q32. Unity Catalog のビューと、そのクエリ元テーブルへの権限について正しい説明はどれか。
- A. ビューを読むには、ビューへの
SELECTに加えてクエリ元の全テーブルへのSELECTも必要である - B. ビューは物理データを持つため、クエリ元テーブルの権限は無関係である
- C. ビューへの権限は付与できず、常にクエリ元テーブルの権限で制御される
- D. ビューのクエリ元テーブルへの権限は不要で、ビュー所有者の権限で基盤テーブルが解決される。この性質により、ベーステーブルを直接読めないユーザーに対して行/列アクセスを制限したビューを公開できる
Q33. メダリオンアーキテクチャの Gold 層について、教材の記述として正しいものはどれか。
- A. Gold 層は Silver / Bronze より多くのデータセットを含み、すべての履歴データを未集計で保持する
- B. ダウンストリームの分析・ダッシュボード・ML・アプリを駆動する高度に洗練されたビューで、特定の期間や地域に対して高度に集計・フィルタされることが多い。含まれるデータセット数は Silver / Bronze より少ない。ディメンションモデルでリレーションを確立しメジャーを定義し、頻繁に使う集計はマテリアライズドビューとして事前集計する。大量の履歴データは通常 Silver でアクセスし Gold には具体化しない
- C. Gold 層は生データの保管を担い、BI からは直接参照しない
- D. Gold 層では正規化を行い、非正規化は Silver 層で行う
Q34. databricks bundle destroy とバンドルの一意性について正しい説明はどれか。
- A.
destroyはデプロイ済みリソースを一時停止するだけで、後から復元できる - B.
destroyはローカルのバンドル定義を削除するが、ワークスペース上のリソースは残る - C.
destroyはデプロイ済みのジョブ・パイプライン・成果物を完全に削除し、取り消せない(--auto-approveで確認プロンプトをスキップできる)。またバンドルは「名前 × ターゲット × デプロイ元 ID」で一意に識別され、これらが同一だと別バンドルのデプロイが互いに干渉する - D. バンドルの一意性はバンドル名だけで決まるため、ターゲットが違えば干渉しない
Q35. Auto Loader の cloudFiles.schemaHints について正しい説明はどれか。
- A. 推論スキーマに既知の型情報を明示指定してオーバーライドする(例:
"tags map<string,string>, version int")。user_info.dob DATEのような入れ子指定や配列・マップ要素の指定も可能で、ストリームに存在しない列の追加もできる。スキーマを指定しない場合にのみ使われ、inferColumnTypesの有無に関係なく使用できる - B. スキーマ全体を完全に定義する必要があり、部分的な指定はできない
- C.
schemaHintsはschemaLocationの別名である - D.
schemaHintsを指定するとスキーマ進化が無効になる
Q36. df.write.format("json").mode("overwrite").save("/tmp/json_data") を実行した結果として正しいものはどれか。
- A.
/tmp/json_dataという単一の JSON ファイルが作成される - B. JSON 形式では書き込めず、Delta に変換する必要がある
- C. 書き込みは行われず、実行計画だけが作成される
- D. Spark は分散処理のため、1 ファイルではなくファイルのディレクトリを書き出す(Delta Lake も Parquet フォルダー/ファイルを分割する)。なお Databricks はほとんどのアプリケーションでファイルパスよりもテーブルの使用を推奨している
Q37. ストリーミングテーブルのソースで更新や削除が発生する場合(例: GDPR の「忘れられる権利」)の対処として正しいものはどれか。
- A. ストリーミングテーブルは更新・削除を含むソースも既定で処理できるため、対処は不要である
- B. ストリーミングテーブルは既定で追加専用(append-only)ソースを要求するため、ソースで更新・削除がある場合は
spark.readStream.option("skipChangeCommits", "true")でそれらの変更を無視できる。この設定はoption()でのみ機能し、create_auto_cdc_flow()のターゲットには使えない - C.
ignoreDeletesを必ず併用する必要がある - D. マテリアライズドビューに変更すれば
skipChangeCommitsは不要になるが、増分更新はできなくなる
Q38. Unity Catalog の所有権の移転(ALTER ... OWNER TO)について正しい説明はどれか。
- A. どのユーザーでも自由に所有権を移転できる
- B. 所有権は移転できず、オブジェクトを作り直す必要がある
- C. 移転できるのは現所有者・メタストア管理者・親コンテナーの所有者・
MANAGE保持者のいずれか。ただし特権エスカレーション防止のため、ビュー/関数/モデルの所有権を任意のプリンシパルへ移せるのはメタストア管理者のみ。運用オブジェクトの所有権は個人ではなくグループに割り当てるのがベストプラクティス - D. 所有権の移転にはアカウント管理者権限が必須である
Q39. 次の 3 つの UDF の種類を入出力から判別したとき、正しい組み合わせはどれか。
python
# (1)
@udf("int")
def f1(name): return len(name)
# (2)
@pandas_udf("int")
def f2(scores: pd.Series) -> int: return scores.sum()
# (3)
@udtf(returnType="sum: int, diff: int")
class F3:
def eval(self, x: int, y: int): yield x + y, x - y- A. (1) スカラー UDF(1 行 → 1 値)、(2) UDAF(複数行 → 1 集計値。
groupBy().agg()で使う。セッションスコープ限定)、(3) UDTF(1 行 → 複数行・複数列) - B. (1) UDTF、(2) スカラー UDF、(3) UDAF
- C. (1) スカラー UDF、(2) UDTF、(3) UDAF
- D. (1) バッチスカラー UDF、(2) スカラー UDF、(3) 非スカラー UDF
Q40. パーティション分割の目安として、教材が示す数値はどれか。
- A. 100 GB 未満のテーブルはパーティション分割せず、各パーティションは 100 MB 以上を目安にする
- B. 10 TB 未満はパーティション分割せず、各パーティションは 10 GB 以上を目安にする
- C. テーブルサイズに関わらず、可能な限り細かくパーティション分割するとクエリが速くなる
- D. 1 TB 未満のテーブルはパーティション分割しない。分割するなら各パーティションのデータが 1 GB 以上になる見込みの列で行う。過剰分割(小さすぎるファイル × 多すぎるパーティション)はクエリを遅くする。新しいテーブルはパーティションではなく液体クラスタリングが推奨
Q41. Auto Loader の処理順序とバックフィルについて正しい説明はどれか。
- A. Auto Loader はファイルの到着順に処理することを保証する
- B. Auto Loader はファイルの検出または処理の順序を保証しない(どちらの検出モードでも)。順序が重要な場合はデータ内のタイムスタンプ比較やソフト削除戦略で対応する。またバックフィル(既存ファイルの取り込み)は非同期に実行できるため、コンピューティングリソースの無駄を避けられる
- C. バックフィルは同期実行のみで、完了まで新規ファイルの処理が止まる
- D. ファイル通知モードを使えば処理順序が保証される
Q42. Lakeflow ジョブと Lakeflow 宣言型パイプラインの役割分担として正しいものはどれか。
- A. ジョブがテーブルの定義とデータ品質を担い、パイプラインがスケジュールと通知を担う
- B. 両者は同じ機能の別名であり、どちらを使っても違いはない
- C. パイプラインが「どんなテーブルを・どんな品質で作るか」(データ変換層。ストリーミングテーブル・マテリアライズドビュー・Expectations・Auto Loader)を担い、ジョブが「いつ・どの順で動かすか」(オーケストレーション層。タスク・依存関係・トリガー・通知・パラメータ・条件分岐・リトライ)を担う。パイプラインはジョブのパイプラインタスクとして組み込める
- D. パイプラインはジョブに組み込めないため、それぞれ独立してスケジュールする必要がある
Q43. データインジェスト頻度のコストとレイテンシのトレードオフとして正しいものはどれか。
- A. 継続的な増分インジェスト(
spark.readStreamで継続実行)=コスト高・レイテンシ低、トリガーされた増分インジェスト(spark.readStream+Trigger.AvailableNow、スケジュール/ファイル到着トリガー)=コスト低・レイテンシ高、手動増分を伴うバッチインジェスト(spark.read、パーティション上書き等)=コスト低・レイテンシ最も高い - B. 継続的インジェストはコストが最も低く、レイテンシも最も低い
- C. バッチインジェストが最もコストが高く、レイテンシも最も高い
- D. トリガーされた増分インジェストは継続的インジェストよりコストが高い
Q44. Git フォルダーのセキュリティ機能について正しい説明はどれか。
- A. Git URL 許可リストは設定できないため、任意のリモートリポジトリにアクセスできる
- B. アクセス許可レベルは
CAN READとCAN MANAGEの 2 段階のみである - C. シークレット検出機能はなく、資格情報のコミットは検知されない
- D. Git URL 許可リストでアクセス可能なリモートリポジトリを制限できる(プレフィックス一致・大文字小文字を区別しない・ワイルドカード不可・反映に最大 15 分)。アクセス制御(Premium プラン)は
NO PERMISSIONS/CAN READ/CAN RUN/CAN EDIT/CAN MANAGEの 5 段階。ほかに監査ログ、シークレット検出(コミット前に公開資格情報を自動スキャン)、カスタマーマネージドキーによる Git 資格情報の暗号化がある
Q45. Unity Catalog のボリュームのアクセスパスと制限について正しい説明はどれか。
- A. パスは
/Volumes/<schema>/<catalog>/<volume>/...の順である - B. パスは
/Volumes/<catalog>/<schema>/<volume>/<path>/<file-name>。/<catalog>/<schema>/<volume>のディレクトリは読み取り専用で UC が自動管理され、ファイルシステムコマンドでの作成/削除はできない。/Volumes/<catalog>や/Volumes/<catalog>/<schema>パターンでのオブジェクト一覧は不可で、ボリューム名まで含む完全修飾パスが必要。ボリューム内のファイルを UC のテーブルとして登録することはできない(パスベースのデータアクセス専用) - C. ボリューム内のファイルは
CREATE TABLE ... LOCATIONでテーブルとして登録できる - D. ボリュームは
SELECTで SQL クエリでき、表形式データの管理に適している
解答一覧(自己採点用)
| Q | 正解 | セクション | Q | 正解 | セクション | Q | 正解 | セクション |
|---|---|---|---|---|---|---|---|---|
| 1 | B | ③ 変換 | 16 | A | ③ 変換 | 31 | A | ⑥ 最適化 |
| 2 | C | ⑤ ガバナンス | 17 | C | ④ Jobs | 32 | D | ⑤ ガバナンス |
| 3 | A | ② 取り込み | 18 | B | ⑤ ガバナンス | 33 | B | ③ 変換 |
| 4 | D | ④ Jobs | 19 | D | ③ 変換 | 34 | C | ⑦ CI/CD |
| 5 | B | ⑥ 最適化 | 20 | A | ⑦ CI/CD | 35 | A | ② 取り込み |
| 6 | C | ③ 変換 | 21 | C | ② 取り込み | 36 | D | ③ 変換 |
| 7 | A | ⑦ CI/CD | 22 | B | ⑥ 最適化 | 37 | B | ④ Jobs |
| 8 | D | ② 取り込み | 23 | D | ③ 変換 | 38 | C | ⑤ ガバナンス |
| 9 | C | ③ 変換 | 24 | A | ④ Jobs | 39 | A | ③ 変換 |
| 10 | B | ⑤ ガバナンス | 25 | C | ⑤ ガバナンス | 40 | D | ⑥ 最適化 |
| 11 | D | ④ Jobs | 26 | B | ③ 変換 | 41 | B | ② 取り込み |
| 12 | A | ① 基礎 | 27 | D | ② 取り込み | 42 | C | ④ Jobs |
| 13 | C | ③ 変換 | 28 | A | ① 基礎 | 43 | A | ③ 変換 |
| 14 | B | ⑥ 最適化 | 29 | B | ③ 変換 | 44 | D | ⑦ CI/CD |
| 15 | D | ② 取り込み | 30 | C | ④ Jobs | 45 | B | ⑤ ガバナンス |
採点表(弱点ドメインを特定する)
自分の正答数を書き込んでください。目標は各ドメイン 70% 以上です。
| セクション | 該当問題 | 満点 | 目標 | 自分の正答数 | 判定 | 弱点だった場合に戻る先 |
|---|---|---|---|---|---|---|
| ③ データ変換・モデリング | 1, 6, 9, 13, 16, 19, 23, 26, 29, 33, 36, 39, 43 | 13 | 10 | /13 | 教材・確認問題・課題 5〜8 | |
| ② データ取り込み | 3, 8, 15, 21, 27, 35, 41 | 7 | 5 | /7 | 教材・確認問題・課題 3〜4 | |
| ④ Lakeflow Jobs | 4, 11, 17, 24, 30, 37, 42 | 7 | 5 | /7 | 教材・確認問題・課題 9〜10 | |
| ⑤ ガバナンス・セキュリティ | 2, 10, 18, 25, 32, 38, 45 | 7 | 5 | /7 | 教材・確認問題・課題 11 | |
| ⑥ 最適化・トラブルシューティング | 5, 14, 22, 31, 40 | 5 | 4 | /5 | 教材・確認問題・課題 12 | |
| ⑦ CI/CD | 7, 20, 34, 44 | 4 | 3 | /4 | 教材・確認問題・追加課題 | |
| ① プラットフォーム基礎 | 12, 28 | 2 | 2 | /2 | 教材・確認問題・課題 1〜2 | |
| 合計 | 45 | 32 | /45 |
判定の目安
| 合計正答数 | 判定 | 次にやること |
|---|---|---|
| 41〜45(91%〜) | 合格圏。仕上げ段階 | 用語対訳集・数値チートシートで最終確認して受験 |
| 36〜40(80〜89%) | ほぼ合格圏 | 弱点ドメインの確認問題を周回。時間内に解き切れたかも確認 |
| 32〜35(70〜78%) | ぎりぎり合格圏 | 弱点ドメインの教材を読み直し → ハンズオン課題 → 確認問題の順で戻る |
| 31 以下(〜69%) | 対策不足 | 全ドメインの教材を再通読。特に③(30%)を優先。受験を前倒しにしない |
時間もチェックする
| 所要時間 | 評価 |
|---|---|
| 〜70 分 | 余裕あり。見直し時間も確保できる |
| 70〜90 分 | 適正。本番では読解に時間がかかるので油断しない |
| 90 分超(解き切れなかった) | 時間対策が必要。「まず何を問うているかを 1 文で要約 → 消去法」の訓練を積む |
解説
Q1. 正解: B — filter() と where() は完全に同義。複合条件は (df["Year"] == 2009) & (df["Count"] > 100) のように各条件を括弧で囲む(演算子優先順位のため必須)。→ 教材 3-2
Q2. 正解: C — カタログ/スキーマに付与した権限は現在および将来のすべての子オブジェクトに自動適用される(特権継承)。ただしメタストアレベルの特権は継承されない点が重要な例外。→ 教材 3-4
Q3. 正解: A — rescue は進化させず失敗もせず新列を _rescued_data へ。failOnNewColumns はスキーマ更新か問題ファイル削除まで失敗し自動更新も再起動もしない。既定の addNewColumns は「追加してから失敗 → 再起動で続行」。→ 教材 3-2
Q4. 正解: D — 時間ベース=スケジュール済み、イベントベース=ファイルの到着/テーブルの更新/モデルの更新。加えて継続的(Continuous)と手動(None)がある。→ 教材 3-2
Q5. 正解: B — 自動圧縮は書き込み後に同期的に結合(未圧縮ファイルのみ)、最適化された書き込みは書き込み前にシャッフルしてサイズを整える(パーティションテーブルで特に有効)。A は説明が逆。D は誤りで、どちらも OPTIMIZE の完全な代替ではない。→ 教材 3-2
Q6. 正解: C — selectExpr() は SQL 式を受け取る select のバリエーション、expr() は列を指定する任意の場所で SQL 構文を使える関数、spark.sql() は任意の SQL クエリを実行する。→ 教材 3-2
Q7. 正解: A — databricks bundle run <リソースキー> で、キーは resources.jobs.<key> の最上位要素。ターゲットは -t / --target。→ 教材 3-2
Q8. 正解: D — サフィックスフィルタは path では指定できず pathGlobFilter を使う。path はプレフィックスフィルタ用。Auto Loader の既定 glob 動作は他の Spark ファイルソースと異なるため、揃えたい場合は cloudFiles.useStrictGlobber。→ 教材 3-3
Q9. 正解: C — CTAS はクエリ結果から作成、CREATE TABLE LIKE は定義だけをコピー、CLONE は Delta の複製(ディープ=完全独立コピー / 浅い=定義のみで初期データは元を参照)。→ 教材 3-3
Q10. 正解: B — ALL PRIVILEGES は暗黙的に全特権を意味するが、MANAGE・EXTERNAL USE SCHEMA・EXTERNAL USE LOCATION は含まれない。個別特権は明示的に付与されない(C が誤り)。→ 教材 3-4
Q11. 正解: D — タスク同時実行 2,000、1 時間あたりジョブ作成 10,000、保存ジョブ 10,000、1 ジョブ最大 1,000 タスク、ジョブパラメータ 10,000 文字。→ 教材 3-1・数値チートシート §18
Q12. 正解: A — 3 段階(読み取り → 書き込み → 検証とコミット)で、競合時は同時変更例外で失敗しデータ破損を防ぐ。既定は書き込み=書き込みシリアライザブル、読み取り=スナップショット分離。ロックがなくデッドロックが起きない。追加のみの書き込みは事前読み取り不要(D が誤り)。→ 教材 3-3
Q13. 正解: C — UPDATE SET * EXCEPT (col) は除外列以外の全列を更新し、除外した列は null に設定される(DBR 12.2 LTS 以上)。「元の値のまま保持」ではない点が引っかけ。→ 教材 3-5
Q14. 正解: B — ディスクキャッシュ(SSD ワーカーを選ぶだけで有効、サブクエリ結果は保存不可)を優先し、Spark キャッシュは原則避ける。クエリ結果キャッシュは決定論的クエリで効く(NOW() 等は不可)。→ 教材 3-5
Q15. 正解: D — FORMAT_OPTIONS の mergeSchema はソースファイル間のスキーママージ推論(リーダー側)、COPY_OPTIONS の mergeSchema はターゲット Delta テーブル側のスキーマ展開。スキーマレステーブルへの推論ロードには両方必要。→ 教材 3-4
Q16. 正解: A — UDF はアドホック・手動クレンジング・探索的分析・小〜中規模向け(暗号化/ハッシュ/JSON 解析/検証など)。大規模データ・ETL・ストリーミングは分散処理向けに最適化された組み込み関数を優先する。→ 教材 3-4
Q17. 正解: C — 各ファイルは 1 言語のみだが複数ファイルを 1 パイプラインにまとめられる。既定で transformations 配下の *.py / *.sql がソースになり、explorations は既定でパイプライン更新に含まれない。DAG は自動生成される(D が誤り)。→ 教材 3-3
Q18. 正解: B — マネージドはスキーマの UC マネージドストレージ内に作成され UC がライフサイクルを管理。外部は既存パスに登録し、削除後もデータが残り外部ツールが直接 URI を使える(ガバナンスをバイパスできるため注意)。→ 教材 3-5
Q19. 正解: D — WHEN NOT MATCHED BY SOURCE(DBR 12.2 LTS 以上)はターゲット行がソースに一致しない場合の DELETE / UPDATE。式はターゲット列のみ参照可、条件を省略すると大量変更になるため範囲を絞る。→ 教材 3-5
Q20. 正解: A — プライベートリポジトリまたは書き込み操作には PAT / OAuth が必要。パブリックリポジトリの読み取りのみなら不要。1 ユーザー最大 10 個、プロバイダーごとに既定 1 つ。→ 教材 3-4
Q21. 正解: C — スケーラビリティ(数十億ファイル・非同期バックフィル)、パフォーマンス(検出コストは取り込むファイル数に比例)、スキーマ推論と進化、コスト(ネイティブ API・通知モードで列挙回避)の 4 点。→ 教材 3-1
Q22. 正解: B — AQE の 4 機能はブロードキャストへの動的変更、パーティションの動的結合、スキューの動的処理、空リレーションの検出・伝播。A は DBR の他の自動最適化、C は予測的最適化、D はキャッシュ/Photon。→ 教材 3-5
Q23. 正解: D — Bronze はデータ欠落とスキーマ変更から守るため STRING / VARIANT / BINARY で保存し、メタデータ列を付与するのが推奨。全履歴を保持して再処理・監査を可能にする。アナリストが直接使う層ではない(C が誤り)。→ 教材 3-6
Q24. 正解: A — warn / drop のメトリックはパイプライン UI の[データ品質]タブ。Databricks SQL のスタンドアロンパイプラインではイベントログにクエリする。fail はメトリックが記録されない(D が誤り)。→ 教材 3-4
Q25. 正解: C — BROWSE は使用特権なしでメタデータ検出・アクセス要求を可能にする。カタログレベルで All account users に付与するのがデータ検出のベストプラクティス。→ 教材 3-4
Q26. 正解: B — Silver は Bronze / Silver から読んで Silver に書く。取り込みから直接 Silver は非推奨、Bronze からはストリーミング読み取りが基本、各レコードの検証済み・非集計表現を必ず含む。データモデリングはここで開始する(D が誤り)。→ 教材 3-6
Q27. 正解: D — 空のスキーマレステーブルは COPY INTO でのみ書き込める(INSERT INTO / MERGE INTO は不可)。DBR 11.3 LTS 以降、FORMAT_OPTIONS + COPY_OPTIONS の mergeSchema で推論ロードできる。→ 教材 3-4
Q28. 正解: A — 主キー・外部キーは情報的で強制されない(引っかけ問題として頻出)。DBFS ルート/マウントは非推奨で、アクセス管理は Unity Catalog を使う。→ 教材 3-3・3-2
Q29. 正解: B — TEMPORARY VIEW はセッション限定・名前を修飾できない、GLOBAL TEMPORARY VIEW は global_temp スキーマ、CREATE OR REPLACE VIEW は元の権限を保持しない、IF NOT EXISTS と OR REPLACE は同時指定不可。→ 教材 3-3
Q30. 正解: C — expect_all / expect_all_or_drop / expect_all_or_fail は Python 限定で辞書を引数に取る。SQL は複数 CONSTRAINT をカンマ区切りで並べるだけ。→ 教材 3-4
Q31. 正解: A — OPTIMIZE FULL は初回有効化時/キー変更時に実行する。キー変更がなければ通常の増分 OPTIMIZE と同じ動作になる。→ 教材 3-3
Q32. 正解: D — ビューはクエリ元テーブルへの権限が不要で、ビュー所有者の権限で基盤テーブルが解決される。この性質が行/列アクセス制限に有用。→ 教材 3-2
Q33. 正解: B — Gold は高度に洗練・集計されたビューで、含まれるデータセット数は Silver / Bronze より少ない。ディメンションモデルとマテリアライズドビューを使い、大量の履歴は Silver でアクセスし Gold には具体化しない。→ 教材 3-6
Q34. 正解: C — destroy は完全削除で取り消し不可。バンドルの一意性は「名前 × ターゲット × デプロイ元 ID」で、同一だと別バンドルのデプロイが干渉する。→ 教材 3-2
Q35. 正解: A — schemaHints は推論スキーマに既知の型を明示指定する。入れ子・配列・マップ要素の指定や存在しない列の追加も可能で、スキーマを指定しない場合にのみ使われる。→ 教材 3-2
Q36. 正解: D — Spark は分散処理のためファイルのディレクトリを書き出す。Databricks はファイルパスよりテーブルの使用を推奨。→ 教材 3-2(Professional 教材 4-1 も同旨)
Q37. 正解: B — ストリーミングテーブルは既定で追加専用ソースを要求するため、更新・削除があるソースには skipChangeCommits を使う。この設定は option() でのみ機能し、create_auto_cdc_flow() のターゲットには使えない。→ 教材 3-4
Q38. 正解: C — 移転できるのは現所有者・メタストア管理者・親コンテナー所有者・MANAGE 保持者。ビュー/関数/モデルの任意プリンシパルへの移転はメタストア管理者のみ(特権エスカレーション防止)。→ 教材 3-4
Q39. 正解: A — (1) は 1 行 → 1 値のスカラー UDF、(2) は Series → Scalar で複数行 → 1 集計値=UDAF(セッションスコープ限定)、(3) は 1 行 → 複数行・複数列の UDTF。→ 教材 3-4
Q40. 正解: D — 1 TB 未満は分割しない、分割するなら各パーティション 1 GB 以上。新規テーブルは液体クラスタリングが推奨。→ 教材 3-5・数値チートシート §5
Q41. 正解: B — Auto Loader は検出・処理の順序を保証しない。順序が重要ならデータ内のタイムスタンプ比較やソフト削除戦略で対応。バックフィルは非同期実行可。→ 教材 3-1
Q42. 正解: C — パイプライン=データ変換層(何をどんな品質で作るか)、ジョブ=オーケストレーション層(いつどの順で動かすか)。パイプラインはジョブのパイプラインタスクとして組み込める。→ 教材 3-5
Q43. 正解: A — 継続的=高コスト・低レイテンシ、トリガー(Trigger.AvailableNow)=低コスト・高レイテンシ、バッチ=低コスト・最も高レイテンシ。→ 教材 3-6
Q44. 正解: D — Git URL 許可リスト(プレフィックス一致・ワイルドカード不可・反映最大 15 分)、アクセス制御 5 段階(Premium)、監査ログ、シークレット検出、CMK による資格情報暗号化。→ 教材 3-4
Q45. 正解: B — パスは /Volumes/<catalog>/<schema>/<volume>/...。ボリューム名まで含む完全修飾パスが必要で、/Volumes/<catalog> レベルの一覧は不可。ボリューム内ファイルをテーブルとして登録することはできない(パスベースアクセス専用)。→ 教材 3-5
次にやること
| リソース | 用途 |
|---|---|
| ../07_reference/glossary.md | 英日用語対訳集(用語は英語で覚える) |
| ../07_reference/cheatsheet-numbers.md | 数値・バージョン境界の直前 1 枚 |
| ../05_practice-questions/associate/ | セクション別確認問題(各10問) |
| ../06_hands-on/handson-associate.md | Free Edition で手を動かす 12 課題 |
| mock-professional.md | Professional の模擬試験(合格後に) |