One thing to double check is that you have setup your spark client to use a 
Hive Catalog for the session catalog. It is possible you are using a derby 
based session catalog which the iceberg catalog is wrapping. See

https://github.com/apache/iceberg/issues/2488 
<https://github.com/apache/iceberg/issues/2488>

Make sure that 

spark.sql.catalogimplementation = hive



> On Apr 22, 2021, at 12:30 PM, Szehon Ho <szehon...@apple.com.INVALID> wrote:
> 
> Hi Huadong, nice to see you again :).  The syntax is spark-sql is ‘insert 
> into <catalog>.<db>.<table> …”, here you defined your db as a catalog?  
> 
> You just need to define one catalog and use it when referring to your table.
> 
> 
> 
>> On 22 Apr 2021, at 07:34, Huadong Liu <huadong...@gmail.com 
>> <mailto:huadong...@gmail.com>> wrote:
>> 
>> Hello Iceberg Dev,
>> 
>> I am not sure I follow the discussion on Spark configurations on hive 
>> catalogs <https://iceberg.apache.org/spark-configuration/#catalogs>. I 
>> created an iceberg table with the hive catalog.
>> Configuration conf = new Configuration();
>> conf.set("hive.metastore.uris", args[0]);
>> conf.set("hive.metastore.warehouse.dir", args[1]);
>> 
>> HiveCatalog catalog = new HiveCatalog(conf);
>> ImmutableMap meta = ImmutableMap.of(...);
>> Schema schema = new Schema(...);
>> PartitionSpec spec = PartitionSpec.builderFor(schema)...build();
>> 
>> TableIdentifier name = TableIdentifier.of("my_db", "my_table");
>> Table table = catalog.createTable(name, schema, spec);
>> On a box with hive.metastore.uris set correctly in hive-site.xml, spark-sql 
>> runs fine with 
>> 
>> spark-sql --packages org.apache.iceberg:iceberg-spark3-runtime:0.11.1
>> --conf 
>> spark.sql.catalog.spark_catalog=org.apache.iceberg.spark.SparkSessionCatalog
>> --conf spark.sql.catalog.spark_catalog.type=hive
>> spark-sql> INSERT INTO my_db.my_table VALUES ("111", timestamp 'today', 1), 
>> ("333", timestamp 'today', 3);
>> spark-sql> SELECT * FROM my_db.my_table ;
>> 
>> However, if I follow the Spark hive configuration above to add a table 
>> catalog,
>> 
>> spark-sql --packages org.apache.iceberg:iceberg-spark3-runtime:0.11.1
>> --conf 
>> spark.sql.catalog.spark_catalog=org.apache.iceberg.spark.SparkSessionCatalog
>> --conf spark.sql.catalog.spark_catalog.type=hive 
>> --conf spark.sql.catalog.my_db=org.apache.iceberg.spark.SparkCatalog 
>> --conf spark.sql.catalog.my_db.type=hive
>> spark-sql> INSERT INTO my_db.my_table VALUES ("111", timestamp 'today', 1), 
>> ("333", timestamp 'today', 3);
>> Error in query: Table not found: my_db.my_table;
>> 
>> https://iceberg.apache.org/spark/#reading-an-iceberg-table 
>> <https://iceberg.apache.org/spark/#reading-an-iceberg-table> states that "To 
>> use Iceberg in Spark, first configure Spark catalogs." Did I misunderstand 
>> anything? Do I have to configure catalog/namespace? Thanks for your time on 
>> this.
>> 
>> --
>> Huadong
> 

Reply via email to