This is an automated email from the ASF dual-hosted git repository.
lzljs3620320 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/flink-table-store.git
The following commit(s) were added to refs/heads/master by this push:
new 422ea607 [FLINK-29278] BINARY type is not supported in table store
422ea607 is described below
commit 422ea6072b251b04041b6ca8a738316a30069aad
Author: Nicholas Jiang <[email protected]>
AuthorDate: Wed Sep 21 19:21:03 2022 +0800
[FLINK-29278] BINARY type is not supported in table store
This closes #292
---
.../store/format/FileStatsExtractorTestBase.java | 8 ++
.../store/table/AppendOnlyFileStoreTableTest.java | 51 ++++++----
.../ChangelogValueCountFileStoreTableTest.java | 56 ++++++----
.../table/ChangelogWithKeyFileStoreTableTest.java | 113 ++++++++++++---------
.../table/store/table/FileStoreTableTestBase.java | 77 +++++++++-----
.../table/store/table/WritePreemptMemoryTest.java | 3 +-
.../table/store/format/orc/OrcFileFormat.java | 45 +++++++-
.../format/orc/OrcFileStatsExtractorTest.java | 4 +
8 files changed, 235 insertions(+), 122 deletions(-)
diff --git
a/flink-table-store-common/src/test/java/org/apache/flink/table/store/format/FileStatsExtractorTestBase.java
b/flink-table-store-common/src/test/java/org/apache/flink/table/store/format/FileStatsExtractorTestBase.java
index 90a53f7f..18d5c89a 100644
---
a/flink-table-store-common/src/test/java/org/apache/flink/table/store/format/FileStatsExtractorTestBase.java
+++
b/flink-table-store-common/src/test/java/org/apache/flink/table/store/format/FileStatsExtractorTestBase.java
@@ -30,11 +30,13 @@ import org.apache.flink.table.data.RowData;
import org.apache.flink.table.data.TimestampData;
import org.apache.flink.table.data.binary.BinaryStringData;
import org.apache.flink.table.types.logical.ArrayType;
+import org.apache.flink.table.types.logical.BinaryType;
import org.apache.flink.table.types.logical.CharType;
import org.apache.flink.table.types.logical.DecimalType;
import org.apache.flink.table.types.logical.LogicalType;
import org.apache.flink.table.types.logical.RowType;
import org.apache.flink.table.types.logical.TimestampType;
+import org.apache.flink.table.types.logical.VarBinaryType;
import org.apache.flink.table.types.logical.VarCharType;
import org.junit.jupiter.api.Test;
@@ -128,6 +130,12 @@ public abstract class FileStatsExtractorTestBase {
randomString(random.nextInt(varCharType.getLength()) +
1));
case BOOLEAN:
return random.nextBoolean();
+ case BINARY:
+ BinaryType binaryType = (BinaryType) type;
+ return randomString(binaryType.getLength()).getBytes();
+ case VARBINARY:
+ VarBinaryType varBinaryType = (VarBinaryType) type;
+ return randomString(varBinaryType.getLength()).getBytes();
case TINYINT:
return (byte) random.nextInt(10);
case SMALLINT:
diff --git
a/flink-table-store-core/src/test/java/org/apache/flink/table/store/table/AppendOnlyFileStoreTableTest.java
b/flink-table-store-core/src/test/java/org/apache/flink/table/store/table/AppendOnlyFileStoreTableTest.java
index 620252bb..072eec88 100644
---
a/flink-table-store-core/src/test/java/org/apache/flink/table/store/table/AppendOnlyFileStoreTableTest.java
+++
b/flink-table-store-core/src/test/java/org/apache/flink/table/store/table/AppendOnlyFileStoreTableTest.java
@@ -19,7 +19,6 @@
package org.apache.flink.table.store.table;
import org.apache.flink.configuration.Configuration;
-import org.apache.flink.table.data.GenericRowData;
import org.apache.flink.table.data.RowData;
import org.apache.flink.table.data.binary.BinaryRowData;
import org.apache.flink.table.runtime.typeutils.RowDataSerializer;
@@ -63,9 +62,19 @@ public class AppendOnlyFileStoreTableTest extends
FileStoreTableTestBase {
TableRead read = table.newRead();
assertThat(getResult(read, splits, binaryRow(1), 0,
BATCH_ROW_TO_STRING))
.hasSameElementsAs(
- Arrays.asList("1|10|100", "1|11|101", "1|12|102",
"1|11|101", "1|12|102"));
+ Arrays.asList(
+ "1|10|100|binary|varbinary",
+ "1|11|101|binary|varbinary",
+ "1|12|102|binary|varbinary",
+ "1|11|101|binary|varbinary",
+ "1|12|102|binary|varbinary"));
assertThat(getResult(read, splits, binaryRow(2), 0,
BATCH_ROW_TO_STRING))
- .hasSameElementsAs(Arrays.asList("2|20|200", "2|21|201",
"2|22|202", "2|21|201"));
+ .hasSameElementsAs(
+ Arrays.asList(
+ "2|20|200|binary|varbinary",
+ "2|21|201|binary|varbinary",
+ "2|22|202|binary|varbinary",
+ "2|21|201|binary|varbinary"));
}
@Test
@@ -94,10 +103,10 @@ public class AppendOnlyFileStoreTableTest extends
FileStoreTableTestBase {
assertThat(getResult(read, splits, binaryRow(2), 0,
BATCH_ROW_TO_STRING))
.hasSameElementsAs(
Arrays.asList(
- "2|21|201",
+ "2|21|201|binary|varbinary",
// this record is in the same file with the
first "2|21|201"
- "2|22|202",
- "2|21|201"));
+ "2|22|202|binary|varbinary",
+ "2|21|201|binary|varbinary"));
}
@Test
@@ -108,9 +117,10 @@ public class AppendOnlyFileStoreTableTest extends
FileStoreTableTestBase {
List<Split> splits =
table.newScan().withIncremental(true).plan().splits;
TableRead read = table.newRead();
assertThat(getResult(read, splits, binaryRow(1), 0,
STREAMING_ROW_TO_STRING))
- .isEqualTo(Arrays.asList("+1|11|101", "+1|12|102"));
+ .isEqualTo(
+ Arrays.asList("+1|11|101|binary|varbinary",
"+1|12|102|binary|varbinary"));
assertThat(getResult(read, splits, binaryRow(2), 0,
STREAMING_ROW_TO_STRING))
- .isEqualTo(Collections.singletonList("+2|21|201"));
+
.isEqualTo(Collections.singletonList("+2|21|201|binary|varbinary"));
}
@Test
@@ -139,9 +149,9 @@ public class AppendOnlyFileStoreTableTest extends
FileStoreTableTestBase {
assertThat(getResult(read, splits, binaryRow(1), 0,
STREAMING_ROW_TO_STRING))
.isEqualTo(
Arrays.asList(
- "+1|11|101",
+ "+1|11|101|binary|varbinary",
// this record is in the same file with
"+1|11|101"
- "+1|12|102"));
+ "+1|12|102|binary|varbinary"));
assertThat(getResult(read, splits, binaryRow(2), 0,
STREAMING_ROW_TO_STRING)).isEmpty();
}
@@ -161,8 +171,7 @@ public class AppendOnlyFileStoreTableTest extends
FileStoreTableTestBase {
for (int j = 0; j < Math.max(random.nextInt(200), 1); j++) {
BinaryRowData data =
serializer
- .toBinaryRow(
- GenericRowData.of(i, random.nextInt(),
random.nextLong()))
+ .toBinaryRow(rowData(i, random.nextInt(),
random.nextLong()))
.copy();
int bucket = bucket(hashcode(data), numOfBucket);
dataPerBucket.compute(
@@ -203,19 +212,19 @@ public class AppendOnlyFileStoreTableTest extends
FileStoreTableTestBase {
TableWrite write = table.newWrite();
TableCommit commit = table.newCommit("user");
- write.write(GenericRowData.of(1, 10, 100L));
- write.write(GenericRowData.of(2, 20, 200L));
- write.write(GenericRowData.of(1, 11, 101L));
+ write.write(rowData(1, 10, 100L));
+ write.write(rowData(2, 20, 200L));
+ write.write(rowData(1, 11, 101L));
commit.commit("0", write.prepareCommit(true));
- write.write(GenericRowData.of(1, 12, 102L));
- write.write(GenericRowData.of(2, 21, 201L));
- write.write(GenericRowData.of(2, 22, 202L));
+ write.write(rowData(1, 12, 102L));
+ write.write(rowData(2, 21, 201L));
+ write.write(rowData(2, 22, 202L));
commit.commit("1", write.prepareCommit(true));
- write.write(GenericRowData.of(1, 11, 101L));
- write.write(GenericRowData.of(2, 21, 201L));
- write.write(GenericRowData.of(1, 12, 102L));
+ write.write(rowData(1, 11, 101L));
+ write.write(rowData(2, 21, 201L));
+ write.write(rowData(1, 12, 102L));
commit.commit("2", write.prepareCommit(true));
write.close();
diff --git
a/flink-table-store-core/src/test/java/org/apache/flink/table/store/table/ChangelogValueCountFileStoreTableTest.java
b/flink-table-store-core/src/test/java/org/apache/flink/table/store/table/ChangelogValueCountFileStoreTableTest.java
index 894f5d85..8ce299dd 100644
---
a/flink-table-store-core/src/test/java/org/apache/flink/table/store/table/ChangelogValueCountFileStoreTableTest.java
+++
b/flink-table-store-core/src/test/java/org/apache/flink/table/store/table/ChangelogValueCountFileStoreTableTest.java
@@ -19,7 +19,6 @@
package org.apache.flink.table.store.table;
import org.apache.flink.configuration.Configuration;
-import org.apache.flink.table.data.GenericRowData;
import org.apache.flink.table.store.CoreOptions;
import org.apache.flink.table.store.file.WriteMode;
import org.apache.flink.table.store.file.predicate.Predicate;
@@ -53,9 +52,17 @@ public class ChangelogValueCountFileStoreTableTest extends
FileStoreTableTestBas
List<Split> splits = table.newScan().plan().splits;
TableRead read = table.newRead();
assertThat(getResult(read, splits, binaryRow(1), 0,
BATCH_ROW_TO_STRING))
- .isEqualTo(Arrays.asList("1|11|101", "1|11|101", "1|12|102"));
+ .isEqualTo(
+ Arrays.asList(
+ "1|11|101|binary|varbinary",
+ "1|11|101|binary|varbinary",
+ "1|12|102|binary|varbinary"));
assertThat(getResult(read, splits, binaryRow(2), 0,
BATCH_ROW_TO_STRING))
- .isEqualTo(Arrays.asList("2|20|200", "2|21|201", "2|22|202"));
+ .isEqualTo(
+ Arrays.asList(
+ "2|20|200|binary|varbinary",
+ "2|21|201|binary|varbinary",
+ "2|22|202|binary|varbinary"));
}
@Test
@@ -84,9 +91,9 @@ public class ChangelogValueCountFileStoreTableTest extends
FileStoreTableTestBas
assertThat(getResult(read, splits, binaryRow(2), 0,
BATCH_ROW_TO_STRING))
.isEqualTo(
Arrays.asList(
- "2|21|201",
+ "2|21|201|binary|varbinary",
// this record is in the same file with
"delete 2|21|201"
- "2|22|202"));
+ "2|22|202|binary|varbinary"));
}
@Test
@@ -97,9 +104,14 @@ public class ChangelogValueCountFileStoreTableTest extends
FileStoreTableTestBas
List<Split> splits =
table.newScan().withIncremental(true).plan().splits;
TableRead read = table.newRead();
assertThat(getResult(read, splits, binaryRow(1), 0,
STREAMING_ROW_TO_STRING))
- .isEqualTo(Arrays.asList("-1|10|100", "+1|11|101"));
+ .isEqualTo(
+ Arrays.asList("-1|10|100|binary|varbinary",
"+1|11|101|binary|varbinary"));
assertThat(getResult(read, splits, binaryRow(2), 0,
STREAMING_ROW_TO_STRING))
- .isEqualTo(Arrays.asList("-2|21|201", "-2|21|201",
"+2|22|202"));
+ .isEqualTo(
+ Arrays.asList(
+ "-2|21|201|binary|varbinary",
+ "-2|21|201|binary|varbinary",
+ "+2|22|202|binary|varbinary"));
}
@Test
@@ -129,10 +141,10 @@ public class ChangelogValueCountFileStoreTableTest
extends FileStoreTableTestBas
assertThat(getResult(read, splits, binaryRow(2), 0,
STREAMING_ROW_TO_STRING))
.isEqualTo(
Arrays.asList(
- "-2|21|201",
- "-2|21|201",
+ "-2|21|201|binary|varbinary",
+ "-2|21|201|binary|varbinary",
// this record is in the same file with
"delete 2|21|201"
- "+2|22|202"));
+ "+2|22|202|binary|varbinary"));
}
private void writeData() throws Exception {
@@ -140,22 +152,22 @@ public class ChangelogValueCountFileStoreTableTest
extends FileStoreTableTestBas
TableWrite write = table.newWrite();
TableCommit commit = table.newCommit("user");
- write.write(GenericRowData.of(1, 10, 100L));
- write.write(GenericRowData.of(2, 20, 200L));
- write.write(GenericRowData.of(1, 11, 101L));
+ write.write(rowData(1, 10, 100L));
+ write.write(rowData(2, 20, 200L));
+ write.write(rowData(1, 11, 101L));
commit.commit("0", write.prepareCommit(true));
- write.write(GenericRowData.of(2, 21, 201L));
- write.write(GenericRowData.of(1, 12, 102L));
- write.write(GenericRowData.of(2, 21, 201L));
- write.write(GenericRowData.of(2, 21, 201L));
+ write.write(rowData(2, 21, 201L));
+ write.write(rowData(1, 12, 102L));
+ write.write(rowData(2, 21, 201L));
+ write.write(rowData(2, 21, 201L));
commit.commit("1", write.prepareCommit(true));
- write.write(GenericRowData.of(1, 11, 101L));
- write.write(GenericRowData.of(2, 22, 202L));
- write.write(GenericRowData.ofKind(RowKind.DELETE, 2, 21, 201L));
- write.write(GenericRowData.ofKind(RowKind.DELETE, 1, 10, 100L));
- write.write(GenericRowData.ofKind(RowKind.DELETE, 2, 21, 201L));
+ write.write(rowData(1, 11, 101L));
+ write.write(rowData(2, 22, 202L));
+ write.write(rowDataWithKind(RowKind.DELETE, 2, 21, 201L));
+ write.write(rowDataWithKind(RowKind.DELETE, 1, 10, 100L));
+ write.write(rowDataWithKind(RowKind.DELETE, 2, 21, 201L));
commit.commit("2", write.prepareCommit(true));
write.close();
diff --git
a/flink-table-store-core/src/test/java/org/apache/flink/table/store/table/ChangelogWithKeyFileStoreTableTest.java
b/flink-table-store-core/src/test/java/org/apache/flink/table/store/table/ChangelogWithKeyFileStoreTableTest.java
index 8ff0b786..3f4e908d 100644
---
a/flink-table-store-core/src/test/java/org/apache/flink/table/store/table/ChangelogWithKeyFileStoreTableTest.java
+++
b/flink-table-store-core/src/test/java/org/apache/flink/table/store/table/ChangelogWithKeyFileStoreTableTest.java
@@ -19,7 +19,6 @@
package org.apache.flink.table.store.table;
import org.apache.flink.configuration.Configuration;
-import org.apache.flink.table.data.GenericRowData;
import org.apache.flink.table.store.CoreOptions;
import org.apache.flink.table.store.CoreOptions.ChangelogProducer;
import org.apache.flink.table.store.file.WriteMode;
@@ -52,18 +51,18 @@ public class ChangelogWithKeyFileStoreTableTest extends
FileStoreTableTestBase {
createFileStoreTable(conf ->
conf.set(CoreOptions.SEQUENCE_FIELD, "b"));
TableWrite write = table.newWrite();
TableCommit commit = table.newCommit("user");
- write.write(GenericRowData.of(1, 10, 200L));
- write.write(GenericRowData.of(1, 10, 100L));
- write.write(GenericRowData.of(1, 11, 101L));
+ write.write(rowData(1, 10, 200L));
+ write.write(rowData(1, 10, 100L));
+ write.write(rowData(1, 11, 101L));
commit.commit("0", write.prepareCommit(true));
- write.write(GenericRowData.of(1, 11, 55L));
+ write.write(rowData(1, 11, 55L));
commit.commit("1", write.prepareCommit(true));
write.close();
List<Split> splits = table.newScan().plan().splits;
TableRead read = table.newRead();
assertThat(getResult(read, splits, binaryRow(1), 0,
BATCH_ROW_TO_STRING))
- .isEqualTo(Arrays.asList("1|10|200", "1|11|101"));
+ .isEqualTo(Arrays.asList("1|10|200|binary|varbinary",
"1|11|101|binary|varbinary"));
}
@Test
@@ -74,9 +73,10 @@ public class ChangelogWithKeyFileStoreTableTest extends
FileStoreTableTestBase {
List<Split> splits = table.newScan().plan().splits;
TableRead read = table.newRead();
assertThat(getResult(read, splits, binaryRow(1), 0,
BATCH_ROW_TO_STRING))
- .isEqualTo(Collections.singletonList("1|10|1000"));
+
.isEqualTo(Collections.singletonList("1|10|1000|binary|varbinary"));
assertThat(getResult(read, splits, binaryRow(2), 0,
BATCH_ROW_TO_STRING))
- .isEqualTo(Arrays.asList("2|21|20001", "2|22|202"));
+ .isEqualTo(
+ Arrays.asList("2|21|20001|binary|varbinary",
"2|22|202|binary|varbinary"));
}
@Test
@@ -107,7 +107,7 @@ public class ChangelogWithKeyFileStoreTableTest extends
FileStoreTableTestBase {
Arrays.asList(
// only filter on key should be performed,
// and records from the same file should also
be selected
- "2|21|20001", "2|22|202"));
+ "2|21|20001|binary|varbinary",
"2|22|202|binary|varbinary"));
}
@Test
@@ -118,9 +118,13 @@ public class ChangelogWithKeyFileStoreTableTest extends
FileStoreTableTestBase {
List<Split> splits =
table.newScan().withIncremental(true).plan().splits;
TableRead read = table.newRead();
assertThat(getResult(read, splits, binaryRow(1), 0,
STREAMING_ROW_TO_STRING))
- .isEqualTo(Collections.singletonList("-1|11|1001"));
+
.isEqualTo(Collections.singletonList("-1|11|1001|binary|varbinary"));
assertThat(getResult(read, splits, binaryRow(2), 0,
STREAMING_ROW_TO_STRING))
- .isEqualTo(Arrays.asList("-2|20|200", "+2|21|20001",
"+2|22|202"));
+ .isEqualTo(
+ Arrays.asList(
+ "-2|20|200|binary|varbinary",
+ "+2|21|20001|binary|varbinary",
+ "+2|22|202|binary|varbinary"));
}
@Test
@@ -153,7 +157,9 @@ public class ChangelogWithKeyFileStoreTableTest extends
FileStoreTableTestBase {
Arrays.asList(
// only filter on key should be performed,
// and records from the same file should also
be selected
- "-2|20|200", "+2|21|20001", "+2|22|202"));
+ "-2|20|200|binary|varbinary",
+ "+2|21|20001|binary|varbinary",
+ "+2|22|202|binary|varbinary"));
}
@Test
@@ -163,11 +169,11 @@ public class ChangelogWithKeyFileStoreTableTest extends
FileStoreTableTestBase {
conf -> conf.set(CoreOptions.CHANGELOG_PRODUCER,
ChangelogProducer.INPUT));
TableWrite write = table.newWrite();
TableCommit commit = table.newCommit("user");
- write.write(GenericRowData.of(1, 10, 100L));
- write.write(GenericRowData.ofKind(RowKind.DELETE, 1, 10, 100L));
- write.write(GenericRowData.of(1, 10, 101L));
- write.write(GenericRowData.ofKind(RowKind.UPDATE_BEFORE, 1, 10, 101L));
- write.write(GenericRowData.ofKind(RowKind.UPDATE_AFTER, 1, 10, 102L));
+ write.write(rowData(1, 10, 100L));
+ write.write(rowDataWithKind(RowKind.DELETE, 1, 10, 100L));
+ write.write(rowData(1, 10, 101L));
+ write.write(rowDataWithKind(RowKind.UPDATE_BEFORE, 1, 10, 101L));
+ write.write(rowDataWithKind(RowKind.UPDATE_AFTER, 1, 10, 102L));
commit.commit("0", write.prepareCommit(true));
write.close();
@@ -176,11 +182,11 @@ public class ChangelogWithKeyFileStoreTableTest extends
FileStoreTableTestBase {
assertThat(getResult(read, splits, binaryRow(1), 0,
CHANGELOG_ROW_TO_STRING))
.isEqualTo(
Arrays.asList(
- "+I 1|10|100",
- "-D 1|10|100",
- "+I 1|10|101",
- "-U 1|10|101",
- "+U 1|10|102"));
+ "+I 1|10|100|binary|varbinary",
+ "-D 1|10|100|binary|varbinary",
+ "+I 1|10|101|binary|varbinary",
+ "-U 1|10|101|binary|varbinary",
+ "+U 1|10|102|binary|varbinary"));
}
private void writeData() throws Exception {
@@ -188,21 +194,21 @@ public class ChangelogWithKeyFileStoreTableTest extends
FileStoreTableTestBase {
TableWrite write = table.newWrite();
TableCommit commit = table.newCommit("user");
- write.write(GenericRowData.of(1, 10, 100L));
- write.write(GenericRowData.of(2, 20, 200L));
- write.write(GenericRowData.of(1, 11, 101L));
+ write.write(rowData(1, 10, 100L));
+ write.write(rowData(2, 20, 200L));
+ write.write(rowData(1, 11, 101L));
commit.commit("0", write.prepareCommit(true));
- write.write(GenericRowData.of(1, 10, 1000L));
- write.write(GenericRowData.of(2, 21, 201L));
- write.write(GenericRowData.of(2, 21, 2001L));
+ write.write(rowData(1, 10, 1000L));
+ write.write(rowData(2, 21, 201L));
+ write.write(rowData(2, 21, 2001L));
commit.commit("1", write.prepareCommit(true));
- write.write(GenericRowData.of(1, 11, 1001L));
- write.write(GenericRowData.of(2, 21, 20001L));
- write.write(GenericRowData.of(2, 22, 202L));
- write.write(GenericRowData.ofKind(RowKind.DELETE, 1, 11, 1001L));
- write.write(GenericRowData.ofKind(RowKind.DELETE, 2, 20, 200L));
+ write.write(rowData(1, 11, 1001L));
+ write.write(rowData(2, 21, 20001L));
+ write.write(rowData(2, 22, 202L));
+ write.write(rowDataWithKind(RowKind.DELETE, 1, 11, 1001L));
+ write.write(rowDataWithKind(RowKind.DELETE, 2, 20, 200L));
commit.commit("2", write.prepareCommit(true));
write.close();
@@ -216,16 +222,16 @@ public class ChangelogWithKeyFileStoreTableTest extends
FileStoreTableTestBase {
TableWrite write = table.newWrite();
TableCommit commit = table.newCommit("user");
- write.write(GenericRowData.of(1, 10, 100L));
- write.write(GenericRowData.of(1, 20, 200L));
+ write.write(rowData(1, 10, 100L));
+ write.write(rowData(1, 20, 200L));
commit.commit("0", write.prepareCommit(true));
- write.write(GenericRowData.of(1, 30, 300L));
- write.write(GenericRowData.of(1, 40, 400L));
+ write.write(rowData(1, 30, 300L));
+ write.write(rowData(1, 40, 400L));
commit.commit("1", write.prepareCommit(true));
- write.write(GenericRowData.of(1, 50, 500L));
- write.write(GenericRowData.of(1, 60, 600L));
+ write.write(rowData(1, 50, 500L));
+ write.write(rowData(1, 60, 600L));
commit.commit("2", write.prepareCommit(true));
PredicateBuilder builder = new PredicateBuilder(ROW_TYPE);
@@ -234,12 +240,14 @@ public class ChangelogWithKeyFileStoreTableTest extends
FileStoreTableTestBase {
// push down key filter a = 30
TableRead read = table.newRead().withFilter(builder.equal(1, 30));
assertThat(getResult(read, splits, binaryRow(1), 0,
BATCH_ROW_TO_STRING))
- .hasSameElementsAs(Arrays.asList("1|30|300", "1|40|400"));
+ .hasSameElementsAs(
+ Arrays.asList("1|30|300|binary|varbinary",
"1|40|400|binary|varbinary"));
// push down value filter b = 300L
read = table.newRead().withFilter(builder.equal(2, 300L));
assertThat(getResult(read, splits, binaryRow(1), 0,
BATCH_ROW_TO_STRING))
- .hasSameElementsAs(Arrays.asList("1|30|300", "1|40|400"));
+ .hasSameElementsAs(
+ Arrays.asList("1|30|300|binary|varbinary",
"1|40|400|binary|varbinary"));
// push down both key filter and value filter
read =
@@ -247,11 +255,16 @@ public class ChangelogWithKeyFileStoreTableTest extends
FileStoreTableTestBase {
.withFilter(
PredicateBuilder.or(builder.equal(1, 10),
builder.equal(2, 300L)));
assertThat(getResult(read, splits, binaryRow(1), 0,
BATCH_ROW_TO_STRING))
- .hasSameElementsAs(Arrays.asList("1|10|100", "1|20|200",
"1|30|300", "1|40|400"));
+ .hasSameElementsAs(
+ Arrays.asList(
+ "1|10|100|binary|varbinary",
+ "1|20|200|binary|varbinary",
+ "1|30|300|binary|varbinary",
+ "1|40|400|binary|varbinary"));
// update pk 60, 10
- write.write(GenericRowData.of(1, 60, 500L));
- write.write(GenericRowData.of(1, 10, 10L));
+ write.write(rowData(1, 60, 500L));
+ write.write(rowData(1, 10, 10L));
commit.commit("3", write.prepareCommit(true));
write.close();
@@ -262,12 +275,12 @@ public class ChangelogWithKeyFileStoreTableTest extends
FileStoreTableTestBase {
assertThat(getResult(read, splits, binaryRow(1), 0,
BATCH_ROW_TO_STRING))
.hasSameElementsAs(
Arrays.asList(
- "1|10|10",
- "1|20|200",
- "1|30|300",
- "1|40|400",
- "1|50|500",
- "1|60|500"));
+ "1|10|10|binary|varbinary",
+ "1|20|200|binary|varbinary",
+ "1|30|300|binary|varbinary",
+ "1|40|400|binary|varbinary",
+ "1|50|500|binary|varbinary",
+ "1|60|500|binary|varbinary"));
}
@Override
diff --git
a/flink-table-store-core/src/test/java/org/apache/flink/table/store/table/FileStoreTableTestBase.java
b/flink-table-store-core/src/test/java/org/apache/flink/table/store/table/FileStoreTableTestBase.java
index 3c80b563..9a9c2087 100644
---
a/flink-table-store-core/src/test/java/org/apache/flink/table/store/table/FileStoreTableTestBase.java
+++
b/flink-table-store-core/src/test/java/org/apache/flink/table/store/table/FileStoreTableTestBase.java
@@ -71,12 +71,23 @@ public abstract class FileStoreTableTestBase {
new LogicalType[] {
DataTypes.INT().getLogicalType(),
DataTypes.INT().getLogicalType(),
- DataTypes.BIGINT().getLogicalType()
+ DataTypes.BIGINT().getLogicalType(),
+ DataTypes.BINARY(1).getLogicalType(),
+ DataTypes.VARBINARY(1).getLogicalType()
},
- new String[] {"pt", "a", "b"});
+ new String[] {"pt", "a", "b", "c", "d"});
protected static final int[] PROJECTION = new int[] {2, 1};
protected static final Function<RowData, String> BATCH_ROW_TO_STRING =
- rowData -> rowData.getInt(0) + "|" + rowData.getInt(1) + "|" +
rowData.getLong(2);
+ rowData ->
+ rowData.getInt(0)
+ + "|"
+ + rowData.getInt(1)
+ + "|"
+ + rowData.getLong(2)
+ + "|"
+ + new String(rowData.getBinary(3))
+ + "|"
+ + new String(rowData.getBinary(4));
protected static final Function<RowData, String>
BATCH_PROJECTED_ROW_TO_STRING =
rowData -> rowData.getLong(0) + "|" + rowData.getInt(1);
protected static final Function<RowData, String> STREAMING_ROW_TO_STRING =
@@ -106,14 +117,14 @@ public abstract class FileStoreTableTestBase {
TableWrite write = table.newWrite();
TableCommit commit = table.newCommit("user");
- write.write(GenericRowData.of(1, 10, 100L));
- write.write(GenericRowData.of(2, 20, 200L));
+ write.write(rowData(1, 10, 100L));
+ write.write(rowData(2, 20, 200L));
commit.commit("0", write.prepareCommit(true));
write.close();
write = table.newWrite().withOverwrite(true);
commit = table.newCommit("user");
- write.write(GenericRowData.of(2, 21, 201L));
+ write.write(rowData(2, 21, 201L));
Map<String, String> overwritePartition = new HashMap<>();
overwritePartition.put("pt", "2");
commit.withOverwritePartition(overwritePartition).commit("1",
write.prepareCommit(true));
@@ -122,9 +133,9 @@ public abstract class FileStoreTableTestBase {
List<Split> splits = table.newScan().plan().splits;
TableRead read = table.newRead();
assertThat(getResult(read, splits, binaryRow(1), 0,
BATCH_ROW_TO_STRING))
- .hasSameElementsAs(Collections.singletonList("1|10|100"));
+
.hasSameElementsAs(Collections.singletonList("1|10|100|binary|varbinary"));
assertThat(getResult(read, splits, binaryRow(2), 0,
BATCH_ROW_TO_STRING))
- .hasSameElementsAs(Collections.singletonList("2|21|201"));
+
.hasSameElementsAs(Collections.singletonList("2|21|201|binary|varbinary"));
}
@Test
@@ -137,11 +148,11 @@ public abstract class FileStoreTableTestBase {
});
TableWrite write = table.newWrite();
- write.write(GenericRowData.of(1, 1, 2L));
- write.write(GenericRowData.of(1, 3, 4L));
- write.write(GenericRowData.of(1, 5, 6L));
- write.write(GenericRowData.of(1, 7, 8L));
- write.write(GenericRowData.of(1, 9, 10L));
+ write.write(rowData(1, 1, 2L));
+ write.write(rowData(1, 3, 4L));
+ write.write(rowData(1, 5, 6L));
+ write.write(rowData(1, 7, 8L));
+ write.write(rowData(1, 9, 10L));
table.newCommit("user").commit("0", write.prepareCommit(true));
write.close();
@@ -161,16 +172,16 @@ public abstract class FileStoreTableTestBase {
TableWrite write = table.newWrite();
TableCommit commit = table.newCommit("user");
- write.write(GenericRowData.of(1, 10, 100L));
- write.write(GenericRowData.of(1, 20, 200L));
+ write.write(rowData(1, 10, 100L));
+ write.write(rowData(1, 20, 200L));
commit.commit("0", write.prepareCommit(true));
- write.write(GenericRowData.of(1, 30, 300L));
- write.write(GenericRowData.of(1, 40, 400L));
+ write.write(rowData(1, 30, 300L));
+ write.write(rowData(1, 40, 400L));
commit.commit("1", write.prepareCommit(true));
- write.write(GenericRowData.of(1, 50, 500L));
- write.write(GenericRowData.of(1, 60, 600L));
+ write.write(rowData(1, 50, 500L));
+ write.write(rowData(1, 60, 600L));
commit.commit("2", write.prepareCommit(true));
write.close();
@@ -179,7 +190,8 @@ public abstract class FileStoreTableTestBase {
List<Split> splits = table.newScan().plan().splits;
TableRead read = table.newRead().withFilter(builder.equal(2, 300L));
assertThat(getResult(read, splits, binaryRow(1), 0,
BATCH_ROW_TO_STRING))
- .hasSameElementsAs(Arrays.asList("1|30|300", "1|40|400"));
+ .hasSameElementsAs(
+ Arrays.asList("1|30|300|binary|varbinary",
"1|40|400|binary|varbinary"));
}
@Test
@@ -191,21 +203,21 @@ public abstract class FileStoreTableTestBase {
for (int i = 0; i < 4; i++) {
// write lots of records, let compaction be slower
for (int j = 0; j < 1000; j++) {
- write.write(GenericRowData.of(1, 10 * i * j, 100L * i * j));
+ write.write(rowData(1, 10 * i * j, 100L * i * j));
}
commit.commit(String.valueOf(i), write.prepareCommit(false));
}
- write.write(GenericRowData.of(1, 40, 400L));
+ write.write(rowData(1, 40, 400L));
List<FileCommittable> commit4 = write.prepareCommit(false);
// trigger compaction, but not wait it.
- write.write(GenericRowData.of(2, 20, 200L));
+ write.write(rowData(2, 20, 200L));
List<FileCommittable> commit5 = write.prepareCommit(true);
// wait compaction finish
// commit5 should be a compaction commit
- write.write(GenericRowData.of(1, 60, 600L));
+ write.write(rowData(1, 60, 600L));
List<FileCommittable> commit6 = write.prepareCommit(true);
// if remove writer too fast, will see old files, do another compaction
// then will be conflicts
@@ -229,7 +241,7 @@ public abstract class FileStoreTableTestBase {
TableWrite write = table.newWrite();
TableCommit commit = table.newCommit("user");
for (int i = 0; i < 10; i++) {
- write.write(GenericRowData.of(1, 1, 100L));
+ write.write(rowData(1, 1, 100L));
commit.commit(String.valueOf(i), write.prepareCommit(true));
}
write.close();
@@ -291,6 +303,21 @@ public abstract class FileStoreTableTestBase {
return b;
}
+ protected GenericRowData rowData(Object... values) {
+ return GenericRowData.of(
+ values[0], values[1], values[2], "binary".getBytes(),
"varbinary".getBytes());
+ }
+
+ protected GenericRowData rowDataWithKind(RowKind rowKind, Object...
values) {
+ return GenericRowData.ofKind(
+ rowKind,
+ values[0],
+ values[1],
+ values[2],
+ "binary".getBytes(),
+ "varbinary".getBytes());
+ }
+
protected FileStoreTable createFileStoreTable(int numOfBucket) throws
Exception {
return createFileStoreTable(conf -> conf.set(BUCKET, numOfBucket));
}
diff --git
a/flink-table-store-core/src/test/java/org/apache/flink/table/store/table/WritePreemptMemoryTest.java
b/flink-table-store-core/src/test/java/org/apache/flink/table/store/table/WritePreemptMemoryTest.java
index 7ddb76dd..353ac24e 100644
---
a/flink-table-store-core/src/test/java/org/apache/flink/table/store/table/WritePreemptMemoryTest.java
+++
b/flink-table-store-core/src/test/java/org/apache/flink/table/store/table/WritePreemptMemoryTest.java
@@ -68,8 +68,7 @@ public class WritePreemptMemoryTest extends
FileStoreTableTestBase {
Random random = new Random();
List<String> expected = new ArrayList<>();
for (int i = 0; i < 10_000; i++) {
- GenericRowData row =
- GenericRowData.of(singlePartition ? 0 : random.nextInt(5),
i, i * 10L);
+ GenericRowData row = rowData(singlePartition ? 0 :
random.nextInt(5), i, i * 10L);
write.write(row);
expected.add(BATCH_ROW_TO_STRING.apply(row));
}
diff --git
a/flink-table-store-format/src/main/java/org/apache/flink/table/store/format/orc/OrcFileFormat.java
b/flink-table-store-format/src/main/java/org/apache/flink/table/store/format/orc/OrcFileFormat.java
index 9910409e..20003de0 100644
---
a/flink-table-store-format/src/main/java/org/apache/flink/table/store/format/orc/OrcFileFormat.java
+++
b/flink-table-store-format/src/main/java/org/apache/flink/table/store/format/orc/OrcFileFormat.java
@@ -29,12 +29,15 @@ import org.apache.flink.orc.OrcSplitReaderUtil;
import org.apache.flink.orc.vector.RowDataVectorizer;
import org.apache.flink.orc.vector.Vectorizer;
import org.apache.flink.orc.writer.ThreadLocalClassLoaderConfiguration;
+import org.apache.flink.table.api.DataTypes;
import org.apache.flink.table.data.RowData;
import org.apache.flink.table.store.file.predicate.Predicate;
import org.apache.flink.table.store.format.FileFormat;
import org.apache.flink.table.store.format.FileStatsExtractor;
import org.apache.flink.table.store.utils.Projection;
+import org.apache.flink.table.types.logical.ArrayType;
import org.apache.flink.table.types.logical.LogicalType;
+import org.apache.flink.table.types.logical.MapType;
import org.apache.flink.table.types.logical.RowType;
import org.apache.orc.OrcFile;
@@ -46,6 +49,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.Properties;
+import java.util.stream.Collectors;
import static
org.apache.flink.table.store.format.orc.OrcFileFormatFactory.IDENTIFIER;
@@ -92,14 +96,18 @@ public class OrcFileFormat extends FileFormat {
}
return OrcInputFormatFactory.create(
- readerConf, type,
Projection.of(projection).toTopLevelIndexes(), orcPredicates);
+ readerConf,
+ (RowType) refineLogicalType(type),
+ Projection.of(projection).toTopLevelIndexes(),
+ orcPredicates);
}
@Override
public BulkWriter.Factory<RowData> createWriterFactory(RowType type) {
LogicalType[] orcTypes = type.getChildren().toArray(new
LogicalType[0]);
- TypeDescription typeDescription =
OrcSplitReaderUtil.logicalTypeToOrcType(type);
+ TypeDescription typeDescription =
+
OrcSplitReaderUtil.logicalTypeToOrcType(refineLogicalType(type));
Vectorizer<RowData> vectorizer =
new RowDataVectorizer(typeDescription.toString(), orcTypes);
OrcFile.WriterOptions writerOptions =
OrcFile.writerOptions(orcProperties, writerConf);
@@ -115,4 +123,37 @@ public class OrcFileFormat extends FileFormat {
properties.forEach((k, v) -> orcProperties.put(IDENTIFIER + "." + k,
v));
return orcProperties;
}
+
+ private static LogicalType refineLogicalType(LogicalType type) {
+ switch (type.getTypeRoot()) {
+ case BINARY:
+ case VARBINARY:
+ // OrcSplitReaderUtil#logicalTypeToOrcType() only supports the
DataTypes.BYTES()
+ // logical type for BINARY and VARBINARY.
+ return DataTypes.BYTES().getLogicalType();
+ case ARRAY:
+ ArrayType arrayType = (ArrayType) type;
+ return new ArrayType(
+ arrayType.isNullable(),
refineLogicalType(arrayType.getElementType()));
+ case MAP:
+ MapType mapType = (MapType) type;
+ return new MapType(
+ refineLogicalType(mapType.getKeyType()),
+ refineLogicalType(mapType.getValueType()));
+ case ROW:
+ RowType rowType = (RowType) type;
+ return new RowType(
+ rowType.isNullable(),
+ rowType.getFields().stream()
+ .map(
+ f ->
+ new RowType.RowField(
+ f.getName(),
+
refineLogicalType(f.getType()),
+
f.getDescription().orElse(null)))
+ .collect(Collectors.toList()));
+ default:
+ return type;
+ }
+ }
}
diff --git
a/flink-table-store-format/src/test/java/org/apache/flink/table/store/format/orc/OrcFileStatsExtractorTest.java
b/flink-table-store-format/src/test/java/org/apache/flink/table/store/format/orc/OrcFileStatsExtractorTest.java
index eaac4b29..86aba5c4 100644
---
a/flink-table-store-format/src/test/java/org/apache/flink/table/store/format/orc/OrcFileStatsExtractorTest.java
+++
b/flink-table-store-format/src/test/java/org/apache/flink/table/store/format/orc/OrcFileStatsExtractorTest.java
@@ -23,6 +23,7 @@ import org.apache.flink.table.store.format.FileFormat;
import org.apache.flink.table.store.format.FileStatsExtractorTestBase;
import org.apache.flink.table.types.logical.ArrayType;
import org.apache.flink.table.types.logical.BigIntType;
+import org.apache.flink.table.types.logical.BinaryType;
import org.apache.flink.table.types.logical.BooleanType;
import org.apache.flink.table.types.logical.CharType;
import org.apache.flink.table.types.logical.DateType;
@@ -34,6 +35,7 @@ import org.apache.flink.table.types.logical.RowType;
import org.apache.flink.table.types.logical.SmallIntType;
import org.apache.flink.table.types.logical.TimestampType;
import org.apache.flink.table.types.logical.TinyIntType;
+import org.apache.flink.table.types.logical.VarBinaryType;
import org.apache.flink.table.types.logical.VarCharType;
/** Tests for {@link OrcFileStatsExtractor}. */
@@ -50,6 +52,8 @@ public class OrcFileStatsExtractorTest extends
FileStatsExtractorTestBase {
new CharType(8),
new VarCharType(8),
new BooleanType(),
+ new BinaryType(8),
+ new VarBinaryType(8),
new TinyIntType(),
new SmallIntType(),
new IntType(),