Hi Szehon,
Thanks for the update.
Can you please point me to the work on supporting DELETE/UPDATE/MERGE in
the DataFrame API?
Thanks,
Wing Yew


On Tue, Jul 9, 2024 at 10:05 PM Szehon Ho <szehon.apa...@gmail.com> wrote:

> Hi,
>
> Just FYI, good news, this change is merged on the Spark side :
> https://github.com/apache/spark/pull/46707 (its the third effort!).  In
> next version of Spark, we will be able to pass read properties via SQL to a
> particular Iceberg table such as
>
> SELECT * FROM iceberg.db.table1 WITH (`locality` = `true`)
>
> I will look at write options after this.
>
> There's also progress in supporting DELETE/UPDATE/MERGE from Dataframes as
> well, it should also be coming soon in Spark.
>
> Thanks,
> Szehon
>
>
>
> On Wed, Jul 26, 2023 at 12:46 PM Wing Yew Poon <wyp...@cloudera.com.invalid>
> wrote:
>
>> We are talking about DELETE/UPDATE/MERGE operations. There is only SQL
>> support for these operations. There is no DataFrame API support for them.*
>> Therefore write options are not applicable. Thus SQLConf is the only
>> available mechanism I can use to override the table property.
>> For reference, we currently support setting distribution mode using write
>> option, SQLConf and table property. It seems to me that
>> https://github.com/apache/iceberg/pull/6838/ is a precedent for what I'd
>> like to do.
>>
>> * It would be of interest to support performing DELETE/UPDATE/MERGE from
>> DataFrames, but that is a whole other topic.
>>
>>
>> On Wed, Jul 26, 2023 at 12:04 PM Ryan Blue <b...@tabular.io> wrote:
>>
>>> I think we should aim to have the same behavior across properties that
>>> are set in SQL conf, table config, and write options. Having SQL conf
>>> override table config for this doesn't make sense to me. If the need is to
>>> override table configuration, then write options are the right way to do it.
>>>
>>> On Wed, Jul 26, 2023 at 10:10 AM Wing Yew Poon
>>> <wyp...@cloudera.com.invalid> wrote:
>>>
>>>> I was on vacation.
>>>> Currently, write modes (copy-on-write/merge-on-read) can only be set as
>>>> table properties, and default to copy-on-write. We have a customer who
>>>> wants to use copy-on-write for certain Spark jobs that write to some
>>>> Iceberg table and merge-on-read for other Spark jobs writing to the same
>>>> table, because of the write characteristics of those jobs. This seems like
>>>> a use case that should be supported. The only way they can do this
>>>> currently is to toggle the table property as needed before doing the
>>>> writes. This is not a sustainable workaround.
>>>> Hence, I think it would be useful to be able to configure the write
>>>> mode as a SQLConf. I also disagree that the table property should always
>>>> win. If this is the case, there is no way to override it. The existing
>>>> behavior in SparkConfParser is to use the option if set, else use the
>>>> session conf if set, else use the table property. This applies across the
>>>> board.
>>>> - Wing Yew
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> On Sun, Jul 16, 2023 at 4:48 PM Ryan Blue <b...@tabular.io> wrote:
>>>>
>>>>> Yes, I agree that there is value for administrators from having some
>>>>> things exposed as Spark SQL configuration. That gets much harder when you
>>>>> want to use the SQLConf for table-level settings, though. For example, the
>>>>> target split size is something that was an engine setting in the Hadoop
>>>>> world, even though it makes no sense to use the same setting across vastly
>>>>> different tables --- think about joining a fact table with a dimension
>>>>> table.
>>>>>
>>>>> Settings like write mode are table-level settings. It matters what is
>>>>> downstream of the table. You may want to set a *default* write mode, but
>>>>> the table-level setting should always win. Currently, there are limits to
>>>>> overriding the write mode in SQL. That's why we should add hints. For
>>>>> anything beyond that, I think we need to discuss what you're trying to do.
>>>>> If it's to override a table-level setting with a SQL global, then we 
>>>>> should
>>>>> understand the use case better.
>>>>>
>>>>> On Fri, Jul 14, 2023 at 6:09 PM Wing Yew Poon
>>>>> <wyp...@cloudera.com.invalid> wrote:
>>>>>
>>>>>> Also, in the case of write mode (I mean write.delete.mode,
>>>>>> write.update.mode, write.merge.mode), these cannot be set as options
>>>>>> currently; they are only settable as table properties.
>>>>>>
>>>>>> On Fri, Jul 14, 2023 at 5:58 PM Wing Yew Poon <wyp...@cloudera.com>
>>>>>> wrote:
>>>>>>
>>>>>>> I think that different use cases benefit from or even require
>>>>>>> different solutions. I think enabling options in Spark SQL is helpful, 
>>>>>>> but
>>>>>>> allowing some configurations to be done in SQLConf is also helpful.
>>>>>>> For Cheng Pan's use case (to disable locality), I think providing a
>>>>>>> conf (which can be added to spark-defaults.conf by a cluster admin) is
>>>>>>> useful.
>>>>>>> For my customer's use case (
>>>>>>> https://github.com/apache/iceberg/pull/7790), being able to set the
>>>>>>> write mode per Spark job (where right now it can only be set as a table
>>>>>>> property) is useful. Allowing this to be done in the SQL with an
>>>>>>> option/hint could also work, but as I understand it, Szehon's PR (
>>>>>>> https://github.com/apache/spark/pull/416830) is only applicable to
>>>>>>> reads, not writes.
>>>>>>>
>>>>>>> - Wing Yew
>>>>>>>
>>>>>>>
>>>>>>> On Thu, Jul 13, 2023 at 1:04 AM Cheng Pan <pan3...@gmail.com> wrote:
>>>>>>>
>>>>>>>> Ryan, I understand that option should be job-specific, and
>>>>>>>> introducing an OPTIONS HINT can make Spark SQL achieves similar
>>>>>>>> capabilities as DataFrame API does.
>>>>>>>>
>>>>>>>> My point is, some of the Iceberg options should not be job-specific.
>>>>>>>>
>>>>>>>> For example, Iceberg has an option “locality” which only allows
>>>>>>>> setting at the job level, but Spark has a configuration
>>>>>>>> “spark.shuffle.reduceLocality.enabled” which allows setting at the 
>>>>>>>> cluster
>>>>>>>> level, this is a gap block Spark administers migrate to Iceberg because
>>>>>>>> they can not disable it at the cluster level.
>>>>>>>>
>>>>>>>> So, what’s the principle in the Iceberg of classifying a
>>>>>>>> configuration into SQLConf or OPTION?
>>>>>>>>
>>>>>>>> Thanks,
>>>>>>>> Cheng Pan
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> > On Jul 5, 2023, at 16:26, Cheng Pan <pan3...@gmail.com> wrote:
>>>>>>>> >
>>>>>>>> > I would argue that the SQLConf way is more in line with Spark
>>>>>>>> user/administrator habits.
>>>>>>>> >
>>>>>>>> > It’s a common practice that Spark administrators set
>>>>>>>> configurations in spark-defaults.conf at the cluster level , and when 
>>>>>>>> the
>>>>>>>> user has issues with their Spark SQL/Jobs, the first question they 
>>>>>>>> asked
>>>>>>>> mostly is: can it be fixed by adding a spark configuration?
>>>>>>>> >
>>>>>>>> > The OPTIONS way brings additional learning efforts to Spark users
>>>>>>>> and how can Spark administrators set them at cluster level?
>>>>>>>> >
>>>>>>>> > Thanks,
>>>>>>>> > Cheng Pan
>>>>>>>> >
>>>>>>>> >
>>>>>>>> >
>>>>>>>> >
>>>>>>>> >> On Jun 17, 2023, at 04:01, Wing Yew Poon
>>>>>>>> <wyp...@cloudera.com.INVALID> wrote:
>>>>>>>> >>
>>>>>>>> >> Hi,
>>>>>>>> >> I recently put up a PR,
>>>>>>>> https://github.com/apache/iceberg/pull/7790, to allow the write
>>>>>>>> mode (copy-on-write/merge-on-read) to be specified in SQLConf. The use 
>>>>>>>> case
>>>>>>>> is explained in the PR.
>>>>>>>> >> Cheng Pan has an open PR,
>>>>>>>> https://github.com/apache/iceberg/pull/7733, to allow locality to
>>>>>>>> be specified in SQLConf.
>>>>>>>> >> In the recent past, https://github.com/apache/iceberg/pull/6838/
>>>>>>>> was a PR to allow the write distribution mode to be specified in 
>>>>>>>> SQLConf.
>>>>>>>> This was merged.
>>>>>>>> >> Cheng Pan asks if there is any guidance on when we should allow
>>>>>>>> configs to be specified in SQLConf.
>>>>>>>> >> Thanks,
>>>>>>>> >> Wing Yew
>>>>>>>> >>
>>>>>>>> >> ps. The above open PRs could use reviews by committers.
>>>>>>>> >>
>>>>>>>> >
>>>>>>>>
>>>>>>>>
>>>>>
>>>>> --
>>>>> Ryan Blue
>>>>> Tabular
>>>>>
>>>>
>>>
>>> --
>>> Ryan Blue
>>> Tabular
>>>
>>

Reply via email to