Jooy Joe
10/10/2023, 3:19 AMIllegal char <:> at index 2 in Flink file system SQL.
When obtaining files from the Windows folder in the file system, an exception occurs due to the addition of a '/' prefix to the file path.
Is this a bug?,The folder specified for file system scanning is '`file///F/other/temp-data`,' but when obtaining a specific file, it becomes '`/F:/other/temp-data/`hour_user_list_202308170935.csv.'
My environment: JDK1.8 Flink 1.16.0 flink-connector-files 1.16.0 .
Here is my code:
@Override
public void process() {
TableEnvironment env = getStreamTableEnvironment();
// create source table
env.executeSql(
FlinkFileSystemResolution
// set sourceMonitorInterval,1L one times
.create("file:///F:/other/temp-data", "csv", 1L)
// ignore error
.ignoreErrorLine()
.resolvingSql(
"create table user_hour_file_source(" +
// METADATA,file path
"`file.name` STRING NOT NULL METADATA," +
"user_type int," +
"client_id varchar(64)," +
"user_id varchar(64)," +
"dslam_id varchar(64)," +
"create_time varchar(64)," +
"primary key(user_type,client_id,user_id,dslam_id,create_time) NOT ENFORCED)"
)
);
// create sink table
...
Exception:
Caused by: java.lang.RuntimeException: SplitFetcher thread 0 received unexpected exception while polling the records
at org.apache.flink.connector.base.source.reader.fetcher.SplitFetcher.runOnce(SplitFetcher.java:150) ~[flink-connector-base-1.16.0.jar:1.16.0]
at org.apache.flink.connector.base.source.reader.fetcher.SplitFetcher.run(SplitFetcher.java:105) ~[flink-connector-base-1.16.0.jar:1.16.0]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[?:1.8.0_351]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[?:1.8.0_351]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[?:1.8.0_351]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[?:1.8.0_351]
... 1 more
Caused by: java.nio.file.InvalidPathException: Illegal char <:> at index 2: /F:/other/temp-data/hour_user_list_202308170935.csv
at sun.nio.fs.WindowsPathParser.normalize(WindowsPathParser.java:182) ~[?:1.8.0_351]
at sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:153) ~[?:1.8.0_351]
at sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:77) ~[?:1.8.0_351]
at sun.nio.fs.WindowsPath.parse(WindowsPath.java:94) ~[?:1.8.0_351]
at sun.nio.fs.WindowsFileSystem.getPath(WindowsFileSystem.java:255) ~[?:1.8.0_351]
at java.nio.file.Paths.get(Paths.java:84) ~[?:1.8.0_351]
at org.apache.flink.connector.file.table.FileSystemTableSource$ReadableFileInfo$2.getValue(FileSystemTableSource.java:499) ~[flink-connector-files-1.16.0.jar:1.16.0]
at org.apache.flink.connector.file.table.FileInfoExtractorBulkFormat.wrapReader(FileInfoExtractorBulkFormat.java:136) ~[flink-connector-files-1.16.0.jar:1.16.0]
at org.apache.flink.connector.file.table.FileInfoExtractorBulkFormat.createReader(FileInfoExtractorBulkFormat.java:109) ~[flink-connector-files-1.16.0.jar:1.16.0]
at org.apache.flink.connector.file.src.impl.FileSourceSplitReader.checkSplitOrStartNext(FileSourceSplitReader.java:112) ~[flink-connector-files-1.16.0.jar:1.16.0]
at org.apache.flink.connector.file.src.impl.FileSourceSplitReader.fetch(FileSourceSplitReader.java:65) ~[flink-connector-files-1.16.0.jar:1.16.0]
at org.apache.flink.connector.base.source.reader.fetcher.FetchTask.run(FetchTask.java:58) ~[flink-connector-base-1.16.0.jar:1.16.0]
at org.apache.flink.connector.base.source.reader.fetcher.SplitFetcher.runOnce(SplitFetcher.java:142) ~[flink-connector-base-1.16.0.jar:1.16.0]
at org.apache.flink.connector.base.source.reader.fetcher.SplitFetcher.run(SplitFetcher.java:105) ~[flink-connector-base-1.16.0.jar:1.16.0]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[?:1.8.0_351]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[?:1.8.0_351]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[?:1.8.0_351]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[?:1.8.0_351]
... 1 more