|
690 | 690 |
|
691 | 691 | {%- set unknown_value__STRING = var('datavault4dbt.unknown_value__STRING', '(unknown)') -%} |
692 | 692 | {%- set error_value__STRING = var('datavault4dbt.error_value__STRING', '(error)') -%} |
| 693 | +{%- set unknown_value_alt__STRING = var('datavault4dbt.unknown_value_alt__STRING', 'u') -%} |
| 694 | +{%- set error_value_alt__STRING = var('datavault4dbt.error_value_alt__STRING', 'e') -%} |
693 | 695 |
|
694 | 696 | {%- set hash_default_values = fromjson(datavault4dbt.hash_default_values(hash_function=datavault4dbt.hash_method())) -%} |
695 | 697 | {%- set unknown_key = hash_default_values['unknown_key'] -%} |
696 | 698 | {%- set error_key = hash_default_values['error_key'] -%} |
697 | 699 |
|
698 | 700 | {%- set datatype = datatype | string | upper | trim -%} |
699 | 701 |
|
| 702 | +{#- Extract the declared length of sized character types (e.g. VARCHAR(50) -> 50), if present. -#} |
| 703 | +{%- set char_length = none -%} |
| 704 | +{%- if (datatype.startswith('VARCHAR') or datatype.startswith('CHAR')) and '(' in datatype -%} |
| 705 | + {%- set char_length = datatype.split('(')[1].split(')')[0] | int -%} |
| 706 | +{%- endif -%} |
| 707 | + |
700 | 708 | {%- if ghost_record_type == 'unknown' -%} |
701 | 709 | {%- if 'TIMESTAMP' in datatype %} CAST({{ datavault4dbt.string_to_timestamp(timestamp_format, beginning_of_all_times) }} AS {{ datatype }}) as {{ alias }} |
702 | 710 | {%- elif datatype == 'DATE' %} CAST('{{ beginning_of_all_times_date }}' AS DATE) as {{ alias }} |
703 | | - {%- elif datatype in ['VARCHAR', 'STRING', 'TEXT'] %} '{{ unknown_value__STRING }}' as {{ alias }} |
704 | | - {%- elif datatype in ['INTEGER', 'INT', 'BIGINT', 'SMALLINT', 'TINYINT', 'DOUBLE', 'FLOAT', 'REAL', 'DECIMAL'] %} CAST({{ unknown_value__numeric }} as {{ datatype }}) as {{ alias }} |
| 711 | + {%- elif datatype.startswith('TIME') -%} |
| 712 | + {%- if 'WITH TIME ZONE' in datatype %} CAST('00:00:01+00:00' AS {{ datatype }}) as {{ alias }} |
| 713 | + {%- else %} CAST('00:00:01' AS {{ datatype }}) as {{ alias }} |
| 714 | + {%- endif -%} |
| 715 | + {%- elif datatype.startswith('VARCHAR') or datatype.startswith('CHAR') -%} |
| 716 | + {%- if char_length is not none and char_length < unknown_value__STRING | length %} CAST('{{ unknown_value_alt__STRING }}' as {{ datatype }}) as {{ alias }} |
| 717 | + {%- else %} CAST('{{ unknown_value__STRING }}' as {{ datatype }}) as {{ alias }} |
| 718 | + {%- endif -%} |
| 719 | + {%- elif datatype in ['STRING', 'TEXT'] %} '{{ unknown_value__STRING }}' as {{ alias }} |
| 720 | + {%- elif datatype.startswith('DECIMAL') or datatype in ['INTEGER', 'INT', 'BIGINT', 'SMALLINT', 'TINYINT', 'DOUBLE', 'FLOAT', 'REAL'] %} CAST({{ unknown_value__numeric }} as {{ datatype }}) as {{ alias }} |
705 | 721 | {%- elif datatype == 'BOOLEAN' %} CAST(FALSE as BOOLEAN) as {{ alias }} |
| 722 | + {%- elif 'BINARY' in datatype %} from_hex({{ datavault4dbt.as_constant(column_str=unknown_key) }}) as {{ alias }} |
706 | 723 | {%- else %} CAST(NULL as {{ datatype }}) as {{ alias }} |
707 | 724 | {% endif %} |
708 | 725 | {%- elif ghost_record_type == 'error' -%} |
709 | 726 | {%- if 'TIMESTAMP' in datatype %} CAST({{ datavault4dbt.string_to_timestamp(timestamp_format, end_of_all_times) }} AS {{ datatype }}) as {{ alias }} |
710 | 727 | {%- elif datatype == 'DATE' %} CAST('{{ end_of_all_times_date }}' AS DATE) as {{ alias }} |
711 | | - {%- elif datatype in ['VARCHAR', 'STRING', 'TEXT'] %} '{{ error_value__STRING }}' as {{ alias }} |
712 | | - {%- elif datatype in ['INTEGER', 'INT', 'BIGINT', 'SMALLINT', 'TINYINT', 'DOUBLE', 'FLOAT', 'REAL', 'DECIMAL'] %} CAST({{ error_value__numeric }} as {{ datatype }}) as {{ alias }} |
| 728 | + {%- elif datatype.startswith('TIME') -%} |
| 729 | + {%- if 'WITH TIME ZONE' in datatype %} CAST('23:59:59+00:00' AS {{ datatype }}) as {{ alias }} |
| 730 | + {%- else %} CAST('23:59:59' AS {{ datatype }}) as {{ alias }} |
| 731 | + {%- endif -%} |
| 732 | + {%- elif datatype.startswith('VARCHAR') or datatype.startswith('CHAR') -%} |
| 733 | + {%- if char_length is not none and char_length < error_value__STRING | length %} CAST('{{ error_value_alt__STRING }}' as {{ datatype }}) as {{ alias }} |
| 734 | + {%- else %} CAST('{{ error_value__STRING }}' as {{ datatype }}) as {{ alias }} |
| 735 | + {%- endif -%} |
| 736 | + {%- elif datatype in ['STRING', 'TEXT'] %} '{{ error_value__STRING }}' as {{ alias }} |
| 737 | + {%- elif datatype.startswith('DECIMAL') or datatype in ['INTEGER', 'INT', 'BIGINT', 'SMALLINT', 'TINYINT', 'DOUBLE', 'FLOAT', 'REAL'] %} CAST({{ error_value__numeric }} as {{ datatype }}) as {{ alias }} |
713 | 738 | {%- elif datatype == 'BOOLEAN' %} CAST(FALSE as BOOLEAN) as {{ alias }} |
| 739 | + {%- elif 'BINARY' in datatype %} from_hex({{ datavault4dbt.as_constant(column_str=error_key) }}) as {{ alias }} |
714 | 740 | {%- else %} CAST(NULL as {{ datatype }}) as {{ alias }} |
715 | 741 | {% endif %} |
716 | 742 | {%- else -%} |
|
0 commit comments