James McGuire
03/03/2023, 1:16 AMJSON_OBJECT component that references a DATE column.
Here's the schema I'm trying to create and the error:
CREATE TABLE test_table (
some_date DATE,
object AS JSON_OBJECT(
KEY 'some_date' VALUE some_date
)
)
COMMENT ''
WITH (
'connector'='datagen'
)
;
Flink SQL> select * from default_catalog.default_database.test_table ;
[ERROR] Could not execute SQL statement. Reason:
org.apache.flink.table.planner.codegen.CodeGenException: Type 'DATE' is not scalar or cannot be converted into JSON.James McGuire
03/03/2023, 1:18 AMDATE_FORMAT function to convert some_date to a string, however, there's an issue with using either `"`'s or `'`'s:
Flink SQL> CREATE TABLE test_table (
> some_date DATE,
> object AS JSON_OBJECT(
> KEY 'some_date' VALUE DATE_FORMAT(some_date, "YYYY-MM-dd")
> )
> )
> COMMENT ''
> WITH (
> 'connector'='datagen'
> )
> ;
[ERROR] Could not execute SQL statement. Reason:
org.apache.flink.sql.parser.impl.ParseException: Encountered "\"" at line 4, column 50.
Was expecting one of:
"ABS" ...
"ARRAY" ...
"AVG" ...
"CARDINALITY" ...
"CASE" ...
"CAST" ...
"CEIL" ...
"CEILING" ...
"CHAR_LENGTH" ...
"CHARACTER_LENGTH" ...
"CLASSIFIER" ...
"COALESCE" ...
"COLLECT" ...
"CONVERT" ...
"COUNT" ...
"COVAR_POP" ...
"COVAR_SAMP" ...
"CUME_DIST" ...
"CURRENT" ...
"CURRENT_CATALOG" ...
"CURRENT_DATE" ...
"CURRENT_DEFAULT_TRANSFORM_GROUP" ...
"CURRENT_PATH" ...
"CURRENT_ROLE" ...
"CURRENT_SCHEMA" ...
"CURRENT_TIME" ...
"CURRENT_TIMESTAMP" ...
"CURRENT_USER" ...
"CURSOR" ...
"DATE" ...
"DEFAULT" ...
"DENSE_RANK" ...
"ELEMENT" ...
"EVERY" ...
"EXISTS" ...
"EXP" ...
"EXTRACT" ...
"FALSE" ...
"FIRST_VALUE" ...
"FLOOR" ...
"FUSION" ...
"GROUPING" ...
"HOUR" ...
"INTERSECTION" ...
"INTERVAL" ...
"JSON_ARRAY" ...
"JSON_ARRAYAGG" ...
"JSON_EXISTS" ...
"JSON_OBJECT" ...
"JSON_OBJECTAGG" ...
"JSON_QUERY" ...
"JSON_VALUE" ...
"LAG" ...
"LAST_VALUE" ...
"LEAD" ...
"LEFT" ...
"LN" ...
"LOCALTIME" ...
"LOCALTIMESTAMP" ...
"LOWER" ...
"MATCH_NUMBER" ...
"MAX" ...
"MIN" ...
"MINUTE" ...
"MOD" ...
"MONTH" ...
"MULTISET" ...
"NEW" ...
"NEXT" ...
"NOT" ...
"NTH_VALUE" ...
"NTILE" ...
"NULL" ...
"NULLIF" ...
"OCTET_LENGTH" ...
"OVERLAY" ...
"PERCENT_RANK" ...
"PERIOD" ...
"POSITION" ...
"POWER" ...
"PREV" ...
"RANK" ...
"REGR_COUNT" ...
"REGR_SXX" ...
"REGR_SYY" ...
"RIGHT" ...
"ROW" ...
"ROW_NUMBER" ...
"RUNNING" ...
"SECOND" ...
"SESSION_USER" ...
"SOME" ...
"SPECIFIC" ...
"SQRT" ...
"STDDEV_POP" ...
"STDDEV_SAMP" ...
"SUBSTRING" ...
"SUM" ...
"SYSTEM_USER" ...
"TIME" ...
"TIMESTAMP" ...
"TRANSLATE" ...
"TRIM" ...
"TRUE" ...
"TRUNCATE" ...
"UNKNOWN" ...
"UPPER" ...
"USER" ...
"VAR_POP" ...
"VAR_SAMP" ...
"YEAR" ...
<UNSIGNED_INTEGER_LITERAL> ...
<APPROX_NUMERIC_LITERAL> ...
<DECIMAL_NUMERIC_LITERAL> ...
<BINARY_STRING_LITERAL> ...
<QUOTED_STRING> ...
<PREFIXED_STRING_LITERAL> ...
<UNICODE_STRING_LITERAL> ...
<BIG_QUERY_DOUBLE_QUOTED_STRING> ...
<BIG_QUERY_QUOTED_STRING> ...
"(" ...
<LBRACE_D> ...
<LBRACE_T> ...
<LBRACE_TS> ...
<LBRACE_FN> ...
"?" ...
"+" ...
"-" ...
<BRACKET_QUOTED_IDENTIFIER> ...
<QUOTED_IDENTIFIER> ...
<BACK_QUOTED_IDENTIFIER> ...
<HYPHENATED_IDENTIFIER> ...
<IDENTIFIER> ...
<UNICODE_QUOTED_IDENTIFIER> ...
Flink SQL> CREATE TABLE test_table (
> some_date DATE,
> object AS JSON_OBJECT(
> KEY 'some_date' VALUE DATE_FORMAT(some_date, 'YYYY-MM-dd')
> )
> )
> COMMENT ''
> WITH (
> 'connector'='datagen'
> )
> ;
>
[ERROR] Could not execute SQL statement. Reason:
org.apache.calcite.sql.validate.SqlValidatorException: Cannot apply 'DATE_FORMAT' to arguments of type 'DATE_FORMAT(<DATE>, <CHAR(10)>)'. Supported form(s): 'DATE_FORMAT(<TIMESTAMP>, <STRING>)'
'DATE_FORMAT(<STRING>, <STRING>)'James McGuire
03/03/2023, 5:56 PMDATE to a TIMESTAMP , seems to fix the issue:
Flink SQL> CREATE TABLE test_table (
> some_date TIMESTAMP,
> object AS JSON_OBJECT(
> KEY 'some_date' VALUE DATE_FORMAT(some_date, 'YYYY-MM-dd')
> )
> )
> COMMENT ''
> WITH (
> 'connector'='datagen'
> )
> ;
However, " still fails:
Flink SQL> CREATE TABLE test_table (
> some_date TIMESTAMP,
> object AS JSON_OBJECT(
> KEY 'some_date' VALUE DATE_FORMAT(some_date, "YYYY-MM-dd")
> )
> )
> COMMENT ''
> WITH (
> 'connector'='datagen'
> )
> ;
[ERROR] Could not execute SQL statement. Reason:
org.apache.flink.sql.parser.impl.ParseException: Encountered "\"" at line 4, column 50.James McGuire
03/03/2023, 7:28 PMDATE column as a JSONJames McGuire
03/03/2023, 8:56 PMJSON_STRING + YEAR / MONTH / `DAYOFMONTH`:
CREATE TABLE test_table (
some_date DATE,
object AS JSON_OBJECT(
KEY 'some_date' VALUE JSON_STRING(YEAR(`some_date`)) || '-' || JSON_STRING(MONTH(`some_date`)) || '-' || JSON_STRING(DAYOFMONTH(`some_date`))
)
)
COMMENT ''
WITH (
'connector'='datagen'
)
;
some_date object
2023-03-03 {"some_date":"2023-3-3"}
2023-03-03 {"some_date":"2023-3-3"}James McGuire
03/03/2023, 8:58 PMDATE_FORMAT to support DATE types: https://issues.apache.org/jira/browse/FLINK-31320