Skip to content

Commit

Permalink
Fix BigQuery parse_json macro usage (#371)
Browse files Browse the repository at this point in the history
* Use safe.parse_json instead of parse_json

* Replace hard-coded parse_json with macro
  • Loading branch information
glsdown authored Jul 21, 2023
1 parent 135b1d4 commit ee91562
Show file tree
Hide file tree
Showing 12 changed files with 20 additions and 20 deletions.
2 changes: 1 addition & 1 deletion macros/parse_json.sql
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,6 @@
{%- endmacro %}

{% macro bigquery__parse_json(field) -%}
parse_json({{ field }}, wide_number_mode=>'round')
safe.parse_json("""{{ field }}""", wide_number_mode=>'round')
{%- endmacro %}

4 changes: 2 additions & 2 deletions macros/upload_exposures.sql
Original file line number Diff line number Diff line change
Expand Up @@ -62,15 +62,15 @@
'{{ run_started_at }}', {# run_started_at #}
'{{ exposure.name | replace("'","\\'") }}', {# name #}
'{{ exposure.type }}', {# type #}
parse_json('{{ tojson(exposure.owner) | replace("'","\\'") }}'), {# owner #}
{{ adapter.dispatch('parse_json', 'dbt_artifacts')(tojson(exposure.owner) | replace("'","\\'")) }}, {# owner #}
'{{ exposure.maturity }}', {# maturity #}
'{{ exposure.original_file_path | replace('\\', '\\\\') }}', {# path #}
"""{{ exposure.description | replace("'","\\'") }}""", {# description #}
'{{ exposure.url }}', {# url #}
'{{ exposure.package_name }}', {# package_name #}
{{ tojson(exposure.depends_on.nodes) }}, {# depends_on_nodes #}
{{ tojson(exposure.tags) }}, {# tags #}
parse_json('{{ tojson(exposure) | replace("\\", "\\\\") | replace("'", "\\'") | replace('"', '\\"') }}') {# all_results #}
{{ adapter.dispatch('parse_json', 'dbt_artifacts')(tojson(exposure) | replace("\\", "\\\\") | replace("'", "\\'") | replace('"', '\\"')) }} {# all_results #}
)
{%- if not loop.last %},{%- endif %}
{%- endfor %}
Expand Down
8 changes: 4 additions & 4 deletions macros/upload_invocations.sql
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@
{% for env_variable in var('env_vars') %}
{% do env_vars_dict.update({env_variable: (env_var(env_variable, ''))}) %}
{% endfor %}
parse_json('''{{ tojson(env_vars_dict) }}'''), {# env_vars #}
{{ adapter.dispatch('parse_json', 'dbt_artifacts')(tojson(env_vars_dict)) }}, {# env_vars #}
{% else %}
null, {# env_vars #}
{% endif %}
Expand All @@ -132,7 +132,7 @@
{% for dbt_var in var('dbt_vars') %}
{% do dbt_vars_dict.update({dbt_var: (var(dbt_var, ''))}) %}
{% endfor %}
parse_json('''{{ tojson(dbt_vars_dict) }}'''), {# dbt_vars #}
{{ adapter.dispatch('parse_json', 'dbt_artifacts')(tojson(dbt_vars_dict)) }}, {# dbt_vars #}
{% else %}
null, {# dbt_vars #}
{% endif %}
Expand All @@ -146,13 +146,13 @@
{% endif %}
{% endif %}

safe.parse_json('''{{ tojson(invocation_args_dict) | replace("'", "\\'") }}'''), {# invocation_args #}
{{ adapter.dispatch('parse_json', 'dbt_artifacts')(tojson(invocation_args_dict) | replace("'", "\\'")) }}, {# invocation_args #}

{% set metadata_env = {} %}
{% for key, value in dbt_metadata_envs.items() %}
{% do metadata_env.update({key: value}) %}
{% endfor %}
parse_json('''{{ tojson(metadata_env) | replace('\\', '\\\\') }}''') {# dbt_custom_envs #}
{{ adapter.dispatch('parse_json', 'dbt_artifacts')(tojson(metadata_env) | replace('\\', '\\\\')) }} {# dbt_custom_envs #}

)
{% endset %}
Expand Down
2 changes: 1 addition & 1 deletion macros/upload_model_executions.sql
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@
'{{ model.node.name }}', {# name #}
'{{ model.node.alias }}', {# alias #}
'{{ model.message | replace("\\", "\\\\") | replace("'", "\\'") | replace('"', '\\"') | replace("\n", "\\n") }}', {# message #}
parse_json('{{ tojson(model.adapter_response) | replace("\\", "\\\\") | replace("'", "\\'") | replace('"', '\\"') }}') {# adapter_response #}
{{ adapter.dispatch('parse_json', 'dbt_artifacts')(tojson(model.adapter_response) | replace("\\", "\\\\") | replace("'", "\\'") | replace('"', '\\"')) }} {# adapter_response #}
)
{%- if not loop.last %},{%- endif %}
{%- endfor %}
Expand Down
4 changes: 2 additions & 2 deletions macros/upload_models.sql
Original file line number Diff line number Diff line change
Expand Up @@ -69,9 +69,9 @@
'{{ model.checksum.checksum }}', {# checksum #}
'{{ model.config.materialized }}', {# materialization #}
{{ tojson(model.tags) }}, {# tags #}
parse_json('''{{ tojson(model.config.meta) }}'''), {# meta #}
{{ adapter.dispatch('parse_json', 'dbt_artifacts')(tojson(model.config.meta)) }}, {# meta #}
'{{ model.alias }}', {# alias #}
parse_json('{{ tojson(model) | replace("\\", "\\\\") | replace("'","\\'") | replace('"', '\\"') }}') {# all_results #}
{{ adapter.dispatch('parse_json', 'dbt_artifacts')(tojson(model) | replace("\\", "\\\\") | replace("'","\\'") | replace('"', '\\"')) }} {# all_results #}
)
{%- if not loop.last %},{%- endif %}
{%- endfor %}
Expand Down
2 changes: 1 addition & 1 deletion macros/upload_seed_executions.sql
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@
'{{ model.node.name }}', {# name #}
'{{ model.node.alias }}', {# alias #}
'{{ model.message | replace("\\", "\\\\") | replace("'", "\\'") | replace('"', '\\"') | replace("\n", "\\n") }}', {# message #}
parse_json('{{ tojson(model.adapter_response) | replace("\\", "\\\\") | replace("'", "\\'") | replace('"', '\\"') }}') {# adapter_response #}
{{ adapter.dispatch('parse_json', 'dbt_artifacts')(tojson(model.adapter_response) | replace("\\", "\\\\") | replace("'", "\\'") | replace('"', '\\"')) }} {# adapter_response #}
)
{%- if not loop.last %},{%- endif %}
{%- endfor %}
Expand Down
4 changes: 2 additions & 2 deletions macros/upload_seeds.sql
Original file line number Diff line number Diff line change
Expand Up @@ -62,9 +62,9 @@
'{{ seed.package_name }}', {# package_name #}
'{{ seed.original_file_path | replace('\\', '\\\\') }}', {# path #}
'{{ seed.checksum.checksum }}', {# checksum #}
parse_json('''{{ tojson(seed.config.meta) }}'''), {# meta #}
{{ adapter.dispatch('parse_json', 'dbt_artifacts')(tojson(seed.config.meta)) }}, {# meta #}
'{{ seed.alias }}', {# alias #}
parse_json('{{ tojson(seed) | replace("\\", "\\\\") | replace("'","\\'") | replace('"', '\\"') }}') {# all_results #}
{{ adapter.dispatch('parse_json', 'dbt_artifacts')(tojson(seed) | replace("\\", "\\\\") | replace("'","\\'") | replace('"', '\\"')) }} {# all_results #}
)
{%- if not loop.last %},{%- endif %}
{%- endfor %}
Expand Down
2 changes: 1 addition & 1 deletion macros/upload_snapshot_executions.sql
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@
'{{ model.node.name }}', {# name #}
'{{ model.node.alias }}', {# alias #}
'{{ model.message | replace("\\", "\\\\") | replace("'", "\\'") | replace('"', '\\"') | replace("\n", "\\n") }}', {# message #}
parse_json('{{ tojson(model.adapter_response) | replace("\\", "\\\\") | replace("'", "\\'") | replace('"', '\\"') }}') {# adapter_response #}
{{ adapter.dispatch('parse_json', 'dbt_artifacts')(tojson(model.adapter_response) | replace("\\", "\\\\") | replace("'", "\\'") | replace('"', '\\"')) }} {# adapter_response #}
)
{%- if not loop.last %},{%- endif %}
{%- endfor %}
Expand Down
4 changes: 2 additions & 2 deletions macros/upload_snapshots.sql
Original file line number Diff line number Diff line change
Expand Up @@ -69,9 +69,9 @@
'{{ snapshot.original_file_path | replace('\\', '\\\\') }}', {# path #}
'{{ snapshot.checksum.checksum }}', {# checksum #}
'{{ snapshot.config.strategy }}', {# strategy #}
parse_json('''{{ tojson(snapshot.config.meta) }}'''), {# meta #}
{{ adapter.dispatch('parse_json', 'dbt_artifacts')(tojson(snapshot.config.meta)) }}, {# meta #}
'{{ snapshot.alias }}', {# alias #}
parse_json('{{ tojson(snapshot) | replace("\\", "\\\\") | replace("'","\\'") | replace('"', '\\"') }}') {# all_results #}
{{ adapter.dispatch('parse_json', 'dbt_artifacts')(tojson(snapshot) | replace("\\", "\\\\") | replace("'","\\'") | replace('"', '\\"')) }} {# all_results #}
)
{%- if not loop.last %},{%- endif %}
{%- endfor %}
Expand Down
4 changes: 2 additions & 2 deletions macros/upload_sources.sql
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,8 @@
'{{ source.name }}', {# name #}
'{{ source.identifier }}', {# identifier #}
'{{ source.loaded_at_field | replace("'","\\'") }}', {# loaded_at_field #}
parse_json('{{ tojson(source.freshness) | replace("'","\\'") }}'), {# freshness #}
parse_json('{{ tojson(source) | replace("\\", "\\\\") | replace("'", "\\'") | replace('"', '\\"') }}') {# all_results #}
{{ adapter.dispatch('parse_json', 'dbt_artifacts')(tojson(source.freshness) | replace("'","\\'")) }}, {# freshness #}
{{ adapter.dispatch('parse_json', 'dbt_artifacts')(tojson(source) | replace("\\", "\\\\") | replace("'", "\\'") | replace('"', '\\"')) }} {# all_results #}
)
{%- if not loop.last %},{%- endif %}
{%- endfor %}
Expand Down
2 changes: 1 addition & 1 deletion macros/upload_test_executions.sql
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@
null, {# rows_affected not available in Databricks #}
{{ 'null' if test.failures is none else test.failures }}, {# failures #}
'{{ test.message | replace("\\", "\\\\") | replace("'", "\\'") | replace('"', '\\"') | replace("\n", "\\n") }}', {# message #}
parse_json('{{ tojson(test.adapter_response) | replace("\\", "\\\\") | replace("'", "\\'") | replace('"', '\\"') }}', wide_number_mode=>'round') {# adapter_response #}
{{ adapter.dispatch('parse_json', 'dbt_artifacts')(tojson(test.adapter_response) | replace("\\", "\\\\") | replace("'", "\\'") | replace('"', '\\"')) }} {# adapter_response #}
)
{%- if not loop.last %},{%- endif %}

Expand Down
2 changes: 1 addition & 1 deletion macros/upload_tests.sql
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@
'{{ test.package_name }}', {# package_name #}
'{{ test.original_file_path | replace('\\', '\\\\') }}', {# test_path #}
{{ tojson(test.tags) }}, {# tags #}
parse_json('{{ tojson(test) | replace("\\", "\\\\") | replace("'","\\'") | replace('"', '\\"') }}', wide_number_mode=>'round') {# all_fields #}
{{ adapter.dispatch('parse_json', 'dbt_artifacts')(tojson(test) | replace("\\", "\\\\") | replace("'","\\'") | replace('"', '\\"')) }} {# all_fields #}
)
{%- if not loop.last %},{%- endif %}
{%- endfor %}
Expand Down

0 comments on commit ee91562

Please sign in to comment.