Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,9 @@ List<Types.NestedField> convertInternal(List<String> names, List<TypeInfo> typeI
if (defaultValues.containsKey(columnName)) {
if (type.isPrimitiveType()) {
Object icebergDefaultValue = HiveSchemaUtil.getDefaultValue(defaultValues.get(columnName), type);
fieldBuilder.withWriteDefault(Expressions.lit(icebergDefaultValue));
if (icebergDefaultValue != null) {
fieldBuilder.withWriteDefault(Expressions.lit(icebergDefaultValue));
}
} else if (!type.isStructType()) {
throw new UnsupportedOperationException(
"Default values for " + columnName + " of type " + type + " are not supported");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -549,7 +549,7 @@ public static String stripQuotes(String val) {
}

public static Object getDefaultValue(String defaultValue, Type type) {
if (defaultValue == null) {
if (defaultValue == null || defaultValue.equalsIgnoreCase("NULL")) {
return null;
}
return switch (type.typeId()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -893,8 +893,10 @@ private void handleDefaultValues(Map<String, String> defaultValues, Map<String,
Map<String, String> structDefaults = HiveSchemaUtil.getDefaultValuesMap(field.getValue());
handleDefaultValues(structDefaults, renameMapping, fieldType.asStructType().fields(), qualifiedName + ".");
} else {
updateSchema.updateColumnDefault(qualifiedName,
Expressions.lit(HiveSchemaUtil.getDefaultValue(field.getValue(), fieldType)));
Object defaultValue = HiveSchemaUtil.getDefaultValue(field.getValue(), fieldType);
updateSchema.updateColumnDefault(qualifiedName, defaultValue != null ?
Expressions.lit(HiveSchemaUtil.getDefaultValue(field.getValue(), fieldType)) :
null);
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,10 @@ INSERT INTO t3 (id, name, age) VALUES (5, 'custom_name', 30);
-- Case 5: Complex struct with nested nulls
INSERT INTO t3 (id, point) VALUES (6, named_struct('x', CAST(null AS INT), 'y', CAST(null AS INT)));

-- Case 6: ALTER AND SET NULL and 'null' string
ALTER TABLE t3 CHANGE COLUMN age age int DEFAULT null;
ALTER TABLE t3 CHANGE COLUMN name name string DEFAULT 'null';

INSERT INTO t3 (id) VALUES (7);

SELECT * FROM t3 ORDER BY id;
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,30 @@ POSTHOOK: query: INSERT INTO t3 (id, point) VALUES (6, named_struct('x', CAST(nu
POSTHOOK: type: QUERY
POSTHOOK: Input: _dummy_database@_dummy_table
POSTHOOK: Output: default@t3
PREHOOK: query: ALTER TABLE t3 CHANGE COLUMN age age int DEFAULT null
PREHOOK: type: ALTERTABLE_RENAMECOL
PREHOOK: Input: default@t3
PREHOOK: Output: default@t3
POSTHOOK: query: ALTER TABLE t3 CHANGE COLUMN age age int DEFAULT null
POSTHOOK: type: ALTERTABLE_RENAMECOL
POSTHOOK: Input: default@t3
POSTHOOK: Output: default@t3
PREHOOK: query: ALTER TABLE t3 CHANGE COLUMN name name string DEFAULT 'null'
PREHOOK: type: ALTERTABLE_RENAMECOL
PREHOOK: Input: default@t3
PREHOOK: Output: default@t3
POSTHOOK: query: ALTER TABLE t3 CHANGE COLUMN name name string DEFAULT 'null'
POSTHOOK: type: ALTERTABLE_RENAMECOL
POSTHOOK: Input: default@t3
POSTHOOK: Output: default@t3
PREHOOK: query: INSERT INTO t3 (id) VALUES (7)
PREHOOK: type: QUERY
PREHOOK: Input: _dummy_database@_dummy_table
PREHOOK: Output: default@t3
POSTHOOK: query: INSERT INTO t3 (id) VALUES (7)
POSTHOOK: type: QUERY
POSTHOOK: Input: _dummy_database@_dummy_table
POSTHOOK: Output: default@t3
PREHOOK: query: SELECT * FROM t3 ORDER BY id
PREHOOK: type: QUERY
PREHOOK: Input: default@t3
Expand All @@ -85,3 +109,4 @@ POSTHOOK: Output: hdfs://### HDFS PATH ###
4 {"x":100,"y":99} NULL 25 50000.0 true 2024-01-01 2024-01-01 10:00:00 100.00 general
5 {"x":100,"y":99} custom_name 30 50000.0 true 2024-01-01 2024-01-01 10:00:00 100.00 general
6 {"x":100,"y":99} unknown 25 50000.0 true 2024-01-01 2024-01-01 10:00:00 100.00 general
7 {"x":100,"y":99} null NULL 50000.0 true 2024-01-01 2024-01-01 10:00:00 100.00 general
Loading