|
2 | 2 |
|
3 | 3 | from snowddl.blueprint import IcebergTableBlueprint, Ident, SchemaObjectIdent |
4 | 4 | from snowddl.parser.abc_parser import AbstractParser, ParsedFile |
| 5 | +from snowddl.parser.database import database_json_schema |
5 | 6 | from snowddl.parser.schema import schema_json_schema |
6 | 7 |
|
7 | 8 |
|
@@ -46,22 +47,30 @@ def load_blueprints(self): |
46 | 47 | combined_params = {} |
47 | 48 |
|
48 | 49 | for database_name in self.get_database_names(): |
| 50 | + database_params = self.parse_single_entity_file(f"{database_name}/params", database_json_schema) |
49 | 51 | combined_params[database_name] = {} |
50 | 52 |
|
51 | 53 | for schema_name in self.get_schema_names_in_database(database_name): |
52 | 54 | schema_params = self.parse_single_entity_file(f"{database_name}/{schema_name}/params", schema_json_schema) |
53 | | - combined_params[database_name][schema_name] = schema_params |
| 55 | + |
| 56 | + combined_params[database_name][schema_name] = { |
| 57 | + "is_transient": database_params.get("is_transient", False) or schema_params.get("is_transient", False), |
| 58 | + "retention_time": schema_params.get("retention_time"), |
| 59 | + "is_sandbox": schema_params.get("is_sandbox", database_params.get("is_sandbox", False)), |
| 60 | + "external_volume": schema_params.get("external_volume", database_params.get("external_volume")), |
| 61 | + "catalog": schema_params.get("catalog", database_params.get("catalog")), |
| 62 | + } |
54 | 63 |
|
55 | 64 | self.parse_schema_object_files( |
56 | 65 | "iceberg_table", iceberg_table_json_schema, partial(self.process_table, combined_params=combined_params) |
57 | 66 | ) |
58 | 67 |
|
59 | 68 | def process_table(self, f: ParsedFile, combined_params: dict): |
60 | 69 | if not combined_params[f.database][f.schema].get("external_volume"): |
61 | | - raise ValueError("Iceberg table requires parameter [external_volume] to be defined on schema level") |
| 70 | + raise ValueError("Iceberg table requires parameter [external_volume] to be defined on database or schema level") |
62 | 71 |
|
63 | 72 | if not combined_params[f.database][f.schema].get("catalog"): |
64 | | - raise ValueError("Iceberg table requires parameter [catalog] to be defined on schema level") |
| 73 | + raise ValueError("Iceberg table requires parameter [catalog] to be defined on database or schema level") |
65 | 74 |
|
66 | 75 | bp = IcebergTableBlueprint( |
67 | 76 | full_name=SchemaObjectIdent(self.env_prefix, f.database, f.schema, f.name), |
|
0 commit comments