-
Notifications
You must be signed in to change notification settings - Fork 163
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
Reading date'9999-12-31' from Oracle leads to 'out of range DateTime' error #644
Comments
I have the same issue, but with Postgres. |
Hi @lmocsi , thanks for opening the issue with a detailed example provided. In connectorx we parse the data to |
Hi @auyer , I tried the example of timestamp |
The data here is from a real database. CREATE TABLE date_test (
date_field timestamp NULL
);
INSERT INTO date_test (date_field) VALUES('2023-03-04 00:00:00.000');
INSERT INTO date_test (date_field) VALUES('2223-03-04 00:00:00.000');
INSERT INTO date_test (date_field) VALUES('4073-04-09 23:59:59.000'); Sending this to select date_field from date_test where date_field > '2200-01-01'; This is the expected output. date_field |
---------------------------+
2223-03-04 00:00:00.000|
4073-04-09 23:59:59.000| Sending this to select date_field from date_test where date_field < '2200-01-01'; |
Hi @auyer , thanks for the quick reply! Indeed the example does not throw an error on
and this is the result arrow table I got from
As you can see, |
Someone in another issue wrote this: "This is a connectorx issue as it reads timestamps in nanoseconds (which it shouldn't, as few databases actually support nanosecond precision - the majority top-out at microseconds)." datetime.datetime(9999, 12, 31) is a valid date in python. How / when will connectorx support it? |
Thanks @lmocsi , I think this is a valid point. We probably need to add different destination timestamp types in terms of different precisions and mapping databases that only support microseconds to the new type. Using
I can try to do this week (but I cannot guarantee any timelines for finishing this if I found other issues of this solution). You are also very welcome to contribute if you are interested : ) |
Can you try out the new alpha version |
Unfortunately connectorx==0.3.4a1 did not fix the issue. :(
|
ops, missed the date type in oralce. How about |
Yeah, 0.3.4a2 solved the problem! |
Will there be a 0.3.4 version out of it? |
Hi @wangxiaoying, can this also be fixed for Trino? |
Hi @Miayl , according to trino's doc, the timestamp type is by default millisecond and could vary according to the parameter P. I believe we can apply similar code change like oracle's fix. Please feel free to submit a PR for this! |
Hi @wangxiaoying, I am using Snowflake. is it applied to Snowflake, too? When do I use this version in pip repository? |
Hi, same error with a MySQL db despite having version 0.4.0 installed. The date is '0001-01-01', weird but correct as far as I know. |
What language are you using?
Python
What version are you using?
3.9.13
What database are you using?
Oracle
What dataframe are you using?
polars
Can you describe your bug?
If reading date'9999-12-31' from Oracle I get the error: 'out of range DateTime'
What are the steps to reproduce the behavior?
Described here in details: pola-rs/polars#16768
Database setup if the error only happens on specific data or data type
Example query / code
What is the error?
thread '' panicked at /__w/connector-x/connector-x/connectorx/src/destinations/arrow2/arrow_assoc.rs:312:36:
out of range DateTime
PanicException Traceback (most recent call last)
/opt/conda/envs/Python-3.9-Premium/lib/python3.9/site-packages/polars/io/database/_utils.py in _read_sql_connectorx(query, connection_uri, partition_on, partition_range, partition_num, protocol, schema_overrides)
53 try:
---> 54 tbl = cx.read_sql(
55 conn=connection_uri,
/opt/conda/envs/Python-3.9-Premium/lib/python3.9/site-packages/connectorx/init.py in read_sql(conn, query, return_type, protocol, partition_on, partition_range, partition_num, index_col)
385
--> 386 result = _read_sql(
387 conn,
PanicException: out of range DateTime
The above exception was the direct cause of the following exception:
PanicException Traceback (most recent call last)
/tmp/1000780000/ipykernel_12937/202598540.py in
4 v_sql = "select * from my_test"
----> 5 df = pl.read_database_uri(
6 v_sql, uri, engine="connectorx",
/opt/conda/envs/Python-3.9-Premium/lib/python3.9/site-packages/polars/io/database/functions.py in read_database_uri(query, uri, partition_on, partition_range, partition_num, protocol, engine, schema_overrides, execute_options)
417 msg = "the 'connectorx' engine does not support use of
execute_options
"418 raise ValueError(msg)
--> 419 return _read_sql_connectorx(
420 query,
421 connection_uri=uri,
/opt/conda/envs/Python-3.9-Premium/lib/python3.9/site-packages/polars/io/database/_utils.py in _read_sql_connectorx(query, connection_uri, partition_on, partition_range, partition_num, protocol, schema_overrides)
64 # basic sanitisation of /user:pass/ credentials exposed in connectorx errs
65 errmsg = re.sub("://[^:]+:[^:]+@", "://:@", str(err))
---> 66 raise type(err)(errmsg) from err
67
68 return from_arrow(tbl, schema_overrides=schema_overrides) # type: ignore[return-value]
PanicException: out of range DateTime
The text was updated successfully, but these errors were encountered: