The table is stored in Parquet format, which is a columnar file format. Hive tries to push the query predicates to the table scan operators so that only the needed columns are read. This is done by adding the needed column IDs into job configuration with property "hive.io.file.readcolumn.ids".
In above case, the query unions the result of 2 subqueries, which select data from one same table. The first subquery doesn't need any column from Parquet file, while the second subquery needs a column "col1". Hive has a bug here, it finally set "hive.io.file.readcolumn.ids" to a value like "0,,0", which method ColumnProjectionUtils.getReadColumnIDs cannot parse.