Comments (8)
Thanks for reporting this @jack-johnson-instapro !
For clarity, what does your example dbt model look like? Is it something like this? Or something else?
select null::bigint as col1
union all
select col1
from test_bigint_varchar
Were you able to find any workarounds to avoid this issue within your own project?
from dbt-redshift.
Hi @dbeatty10, our model looks very much like this, although I simplified it to isolate and clarify the issue. Basically we are unioning results which contain columns defined as NULL::BIGINT
to other results coming from a table.
Currently we have not found a workaround for this issue, we could probably redesign our data model(s) to avoid this questionable union but we don't have bandwidth for this at this time. Right now, the solution we decided for is to not use contracts on this model.
from dbt-redshift.
Thanks for using the most simple model possible for isolating and clarifying the issue 😎.
Did you try out this, by any chance? I'd be curious if flipping the order of the unions makes a difference one way or the other.
-- models/my_model.sql
select col1
from test_bigint_varchar
union all
select null::bigint as col1
from dbt-redshift.
That's a nice finding @dbeatty10, flipping the union order does make a difference! The snippet you suggested results in col1 being of type BIGINT
and not VARCHAR
. However I'm afraid we cannot use it as a workaround... The a-bit-less-simplified model we are using has NULL literals on both side of the union 🤦 something like:
select
col1,
null::bigint as col2
from table1
union all
select
null::bigint as col1,
col2
from table2
So unfortunately flipping the order results in either one or the other being of type VARCHAR...
from dbt-redshift.
Okay!
What about adding an empty relation that has explicit values & types?
select
0::bigint as col1,
0::bigint as col2
where 1=0
union all
select
col1,
null::bigint as col2
from table1
union all
select
null::bigint as col1,
col2
from table2
from dbt-redshift.
@jack-johnson-instapro did you get a chance to check if this works for you or not?
I tried it out on my end, and it seemed to work.
from dbt-redshift.
Sorry for the late response @dbeatty10. Yes this seems to function correctly as a workaround. Thanks for your help.
from dbt-redshift.
Yes this seems to function correctly as a workaround. Thanks for your help.
Awesome news @jack-johnson-instapro !
Since we can't do anything about how Redshift handles null values but we have a workaround now, I'm going to close this as "not planned".
Workaround
If anyone else runs into this, our recommendation is union an empty relation like the following:
select
0::bigint as col1,
0::bigint as col2
where 1=0
union all
select
col1,
null::bigint as col2
from table1
union all
select
null::bigint as col1,
col2
from table2
from dbt-redshift.
Related Issues (20)
- [ADAP-979] [Bug] Database Error: Only user perm tables supported in producer views HOT 11
- [ADAP-1022] [Feature] improve handling of disconnect/broken pipe exceptions thrown by redshift-connector
- [ADAP-1030] [Regression] Back-to-back hooks with a transaction using CTAS + DML fails in 1.5+ HOT 8
- [ADAP-1039] [Tests] Add tests for --empty flag
- [ADAP-1040] Refreshing incremental materialized views takes longer than expected HOT 7
- [ADAP-1050] [Bug] Alter materialized view test fails sporadically
- [ADAP-1052] [Feature] Turn off exponential backoff for Redshift connection testing
- [ADAP-1053] [Bug] Tracking common hanging schemas post ci/cd test runs
- [ADAP-1064] [Bug] AWS IAM Assumed Role Authentication Issue in dbt-redshift with Serverless Redshift HOT 3
- [ADAP-1068] 1.2 redshift has an emergent mypy error HOT 1
- [ADAP-1070] [Bug] `latest` and `1.x.latest` tags for ghcr Docker releases are stale HOT 4
- [ADAP-1077] [Drops Table In Separate Transaction] - Tables are dropped then the _tmp table renamed, causing other queries referencing the table to fail HOT 13
- [ADAP-1083] [Feature] Migrate base adapter references as part of core/adapter decoupling
- [ADAP-1086] [Bug] Grants are failing during incremental runs when data shares are present on serverless HOT 1
- [ADAP-1087] [Regression] Loosen redshift-connector pin HOT 5
- [ADAP-1089] [Bug] Server socket closed when running DBT on GitHub Actions HOT 6
- [ADAP-1099] [Bug] Interrupt (CTRL+C) is not cancelling the right query (wrong pid) HOT 2
- [Bug] Unclear error message when a column in a contracted model is missing a `data_type` HOT 1
- [Bug] Runtime Error 'Lexer' object has no attribute '_SQL_REGEX' HOT 14
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from dbt-redshift.