Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(ingestion/lookml): resolve access notation for LookML Constant #12277

Merged
Show file tree
Hide file tree
Changes from 27 commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
fa4f5f2
lookml parameter support
sid-acryl Dec 19, 2024
865b5ff
fix: pr comment
sagar-salvi-apptware Jan 8, 2025
36f746f
test: updated golden files
sagar-salvi-apptware Jan 8, 2025
4a9ec88
fix: minor change
sagar-salvi-apptware Jan 8, 2025
750cf33
fix: pr comments
sagar-salvi-apptware Jan 8, 2025
4e7bc94
fix: pr comment
sagar-salvi-apptware Jan 10, 2025
ae605d9
fix: refactor changes to lookml constant
sagar-salvi-apptware Jan 15, 2025
a7cc9d5
test: updated test for lookml constant
sagar-salvi-apptware Jan 15, 2025
46316ca
fix: fixed lint issue
sagar-salvi-apptware Jan 15, 2025
2c16fc6
fix: pr comments
sagar-salvi-apptware Jan 16, 2025
0b54bb6
test: updated test for lookml constant
sagar-salvi-apptware Jan 16, 2025
f08b827
fix: pr comment
sagar-salvi-apptware Jan 17, 2025
f1daf12
fix: rename liquid_variable -> liquid_variables
sagar-salvi-apptware Jan 18, 2025
0b85dbd
fix: pr comments
sagar-salvi-apptware Jan 21, 2025
22b5af3
test: add unit tests for lookml constant trasnformer
sagar-salvi-apptware Jan 21, 2025
d68fd5d
fix: minor change
sagar-salvi-apptware Jan 21, 2025
896bf90
fix: minor comments
sagar-salvi-apptware Jan 21, 2025
69fed36
fix: pr comment
sagar-salvi-apptware Jan 22, 2025
8adeb4c
fix: minor pr comments
sagar-salvi-apptware Jan 23, 2025
baf4278
Update metadata-ingestion/docs/sources/looker/lookml_post.md
sagar-salvi-apptware Jan 23, 2025
41422a7
Update metadata-ingestion/docs/sources/looker/lookml_post.md
sagar-salvi-apptware Jan 23, 2025
f4fb5d7
Merge branch 'master' into fix/ING-784-lookml-parameter
mayurinehate Jan 23, 2025
ee02fcd
fix: added report info
sagar-salvi-apptware Jan 24, 2025
6634d1e
test: fixed ut
sagar-salvi-apptware Jan 24, 2025
aa89283
fix: added minor changes
sagar-salvi-apptware Jan 24, 2025
5726a26
fix: Constant Resolution
sagar-salvi-apptware Jan 24, 2025
00d1392
test: Constant Resolution
sagar-salvi-apptware Jan 24, 2025
3d1443a
Update metadata-ingestion/src/datahub/ingestion/source/looker/looker_…
sagar-salvi-apptware Jan 27, 2025
0a4cd06
Update metadata-ingestion/src/datahub/ingestion/source/looker/looker_…
sagar-salvi-apptware Jan 27, 2025
250b876
Update metadata-ingestion/tests/integration/lookml/test_lookml.py
sagar-salvi-apptware Jan 27, 2025
c5d8b2d
fix: minor pr comments
sagar-salvi-apptware Jan 27, 2025
d592a52
Merge branch 'master' into fix/ING-784-lookml-parameter
mayurinehate Jan 27, 2025
31a1152
Merge branch 'master' into fix/ING-784-lookml-parameter
mayurinehate Jan 28, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions metadata-ingestion/docs/sources/looker/looker_recipe.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,18 @@ source:
client_id: ${LOOKER_CLIENT_ID}
client_secret: ${LOOKER_CLIENT_SECRET}

# Liquid variables
# liquid_variables:
# _user_attributes:
# looker_env: "dev"
# dev_database_prefix: "employee"
# dev_schema_prefix: "public"
# dw_eff_dt_date:
# _is_selected: true
# source_region: "ap-south-1"
# db: "test-db"

# LookML Constants
# lookml_constants:
# star_award_winner_year: "public.winner_2025"
# sink configs
54 changes: 46 additions & 8 deletions metadata-ingestion/docs/sources/looker/lookml_post.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,49 @@
#### Configuration Notes

1. If a view contains a liquid template (e.g. `sql_table_name: {{ user_attributes['db']}}.kafka_streaming.events }}`, with `db=ANALYTICS_PROD`), then you will need to specify the values of those variables in the `liquid_variable` config as shown below:
```yml
liquid_variable:
user_attributes:
db: ANALYTICS_PROD
```
### Configuration Notes

1. Handling Liquid Templates

If a view contains a liquid template, for example:

```
sql_table_name: {{ user_attributes['db'] }}.kafka_streaming.events
```

where `db=ANALYTICS_PROD`, you need to specify the values of those variables in the liquid_variables configuration as shown below:

```yml
liquid_variables:
user_attributes:
db: ANALYTICS_PROD
```

2. Resolving LookML Constants

If a view contains a LookML constant, for example:

```
sql_table_name: @{db}.kafka_streaming.events;
```

Ingestion attempts to resolve it's value by looking at project manifest files

```yml
manifest.lkml
constant: db {
value: "ANALYTICS_PROD"
}
```

- If the constant's value is not resolved or incorrectly resolved, you can specify `lookml_constants` configuration in ingestion recipe as shown below. The constant value in recipe takes precedence over constant values resolved from manifest.

```yml
lookml_constants:
db: ANALYTICS_PROD
```


**Additional Notes**

Although liquid variables and LookML constants can be used anywhere in LookML code, their values are currently resolved only for LookML views by DataHub LookML ingestion. This behavior is sufficient since LookML ingestion processes only views and their upstream dependencies.

### Multi-Project LookML (Advanced)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,12 @@ class LookerField:
sql: Optional[str]


@dataclass
class LookerConstant:
name: str
value: str


@dataclass
class LookerModel:
connection: str
Expand Down Expand Up @@ -75,6 +81,7 @@ def from_looker_dict(
try:
parsed = load_and_preprocess_file(
path=included_file,
reporter=reporter,
source_config=source_config,
)
included_explores = parsed.get("explores", [])
Expand Down Expand Up @@ -217,6 +224,7 @@ def resolve_includes(
try:
parsed = load_and_preprocess_file(
path=included_file,
reporter=reporter,
source_config=source_config,
)
seen_so_far.add(included_file)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
import logging
import pathlib
from dataclasses import replace
from typing import Dict, Optional
from typing import Dict, List, Optional

from datahub.ingestion.source.looker.looker_config import LookerConnectionDefinition
from datahub.ingestion.source.looker.looker_dataclasses import LookerViewFile
from datahub.ingestion.source.looker.looker_dataclasses import (
LookerConstant,
LookerViewFile,
)
from datahub.ingestion.source.looker.looker_template_language import (
load_and_preprocess_file,
)
Expand All @@ -30,12 +33,14 @@ def __init__(
base_projects_folder: Dict[str, pathlib.Path],
reporter: LookMLSourceReport,
source_config: LookMLSourceConfig,
manifest_constants: List[LookerConstant] = [],
sagar-salvi-apptware marked this conversation as resolved.
Show resolved Hide resolved
) -> None:
self.viewfile_cache: Dict[str, Optional[LookerViewFile]] = {}
self._root_project_name = root_project_name
self._base_projects_folder = base_projects_folder
self.reporter = reporter
self.source_config = source_config
self.manifest_constants = manifest_constants

def _load_viewfile(
self, project_name: str, path: str, reporter: LookMLSourceReport
Expand Down Expand Up @@ -71,9 +76,15 @@ def _load_viewfile(
try:
logger.debug(f"Loading viewfile {path}")

# load_and preprocess_file is called multiple times for loading view file from multiple flows.
# Flag resolve_constants is a hack to avoid passing around manifest_constants from all of the flows.
# This is fine as rest of flows do not need resolution of constants.
parsed = load_and_preprocess_file(
path=path,
reporter=self.reporter,
source_config=self.source_config,
resolve_constants=True,
manifest_constants=self.manifest_constants,
)

looker_viewfile = LookerViewFile.from_looker_dict(
Expand Down
Loading
Loading