You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@iceberg.apache.org by Taher Koitawala <ta...@gmail.com> on 2022/06/28 05:55:43 UTC

Problems appending file to Athena

Hi All,
          I am trying to append data files to an existing iceberg table in
Athena. I wrote a Java app that uses the Iceberg apis to do this. Attached
below is a sample source code. I do see parquet files being placed on s3
however I cannot read those files in Athena. Am I missing something?

```
//Use glueCatalog and loaded table
Table table =
catalog.loadTable(TableIdentifier.of(Namespace.of("tpc_ds"),"store_sales"));

//created a file appender
FileAppender<Record> appender
=factory.newAppender(S3OutputFile.fromLocation(path,s3Client),
FileFormat.PARQUET);

//Added records to appender
appender.add(record);

//get len and close appender
long fileLen = appender.length();
appender.close();

//get metrics
appender.metrics();

//register datafiles with table
Transaction transaction = table.newTransaction();

//Append data file
AppendFiles appendFiles = transaction.newAppend();
            appendFiles.appendFile(DataFiles.builder(spec)
.withMetrics(metrics)
.withPath(location)
.withFormat(FileFormat.PARQUET)
.withRecordCount(metrics.recordCount())
.withFileSizeInBytes(fileLen).
build());

    //commit append
    appendFiles.commit();

    //commit transaction
    transaction.commitTransaction();

    --program end

```

Regards,
Taher Koitawala

Re: Problems appending file to Athena

Posted by Taher Koitawala <ta...@gmail.com>.
I am using Glue catalog. I figured out the issue here. When i used rowDelta
transaction and FanoutWriters the issue was resolved and data was available
in Athena.

Thanks for the input Ryan

On Thu, 30 Jun, 2022, 4:29 am Ryan Blue, <bl...@tabular.io> wrote:

> Taher, what catalog are you using? You would need to use the same catalog
> that Athena is talking to.
>
> On Mon, Jun 27, 2022 at 10:55 PM Taher Koitawala <ta...@gmail.com>
> wrote:
>
>> Hi All,
>>           I am trying to append data files to an existing iceberg table
>> in Athena. I wrote a Java app that uses the Iceberg apis to do this.
>> Attached below is a sample source code. I do see parquet files being placed
>> on s3 however I cannot read those files in Athena. Am I missing something?
>>
>> ```
>> //Use glueCatalog and loaded table
>> Table table =
>> catalog.loadTable(TableIdentifier.of(Namespace.of("tpc_ds"),"store_sales"));
>>
>> //created a file appender
>> FileAppender<Record> appender
>> =factory.newAppender(S3OutputFile.fromLocation(path,s3Client),
>> FileFormat.PARQUET);
>>
>> //Added records to appender
>> appender.add(record);
>>
>> //get len and close appender
>> long fileLen = appender.length();
>> appender.close();
>>
>> //get metrics
>> appender.metrics();
>>
>> //register datafiles with table
>> Transaction transaction = table.newTransaction();
>>
>> //Append data file
>> AppendFiles appendFiles = transaction.newAppend();
>>             appendFiles.appendFile(DataFiles.builder(spec)
>> .withMetrics(metrics)
>> .withPath(location)
>> .withFormat(FileFormat.PARQUET)
>> .withRecordCount(metrics.recordCount())
>> .withFileSizeInBytes(fileLen).
>> build());
>>
>>     //commit append
>>     appendFiles.commit();
>>
>>     //commit transaction
>>     transaction.commitTransaction();
>>
>>     --program end
>>
>> ```
>>
>> Regards,
>> Taher Koitawala
>>
>
>
> --
> Ryan Blue
> Tabular
>

Re: Problems appending file to Athena

Posted by Ryan Blue <bl...@tabular.io>.
Taher, what catalog are you using? You would need to use the same catalog
that Athena is talking to.

On Mon, Jun 27, 2022 at 10:55 PM Taher Koitawala <ta...@gmail.com> wrote:

> Hi All,
>           I am trying to append data files to an existing iceberg table in
> Athena. I wrote a Java app that uses the Iceberg apis to do this. Attached
> below is a sample source code. I do see parquet files being placed on s3
> however I cannot read those files in Athena. Am I missing something?
>
> ```
> //Use glueCatalog and loaded table
> Table table =
> catalog.loadTable(TableIdentifier.of(Namespace.of("tpc_ds"),"store_sales"));
>
> //created a file appender
> FileAppender<Record> appender
> =factory.newAppender(S3OutputFile.fromLocation(path,s3Client),
> FileFormat.PARQUET);
>
> //Added records to appender
> appender.add(record);
>
> //get len and close appender
> long fileLen = appender.length();
> appender.close();
>
> //get metrics
> appender.metrics();
>
> //register datafiles with table
> Transaction transaction = table.newTransaction();
>
> //Append data file
> AppendFiles appendFiles = transaction.newAppend();
>             appendFiles.appendFile(DataFiles.builder(spec)
> .withMetrics(metrics)
> .withPath(location)
> .withFormat(FileFormat.PARQUET)
> .withRecordCount(metrics.recordCount())
> .withFileSizeInBytes(fileLen).
> build());
>
>     //commit append
>     appendFiles.commit();
>
>     //commit transaction
>     transaction.commitTransaction();
>
>     --program end
>
> ```
>
> Regards,
> Taher Koitawala
>


-- 
Ryan Blue
Tabular