Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[#2921] fix(catalog-lakehouse-iceberg): Add width param to bucket and truncate functions in Gravitino SortOrder #2928

Merged
merged 28 commits into from
May 22, 2024

Conversation

caican00
Copy link
Collaborator

@caican00 caican00 commented Apr 13, 2024

What changes were proposed in this pull request?

Add width param to bucket and truncate functions in Gravitino SortOrder.
for example:
change bucket([id]) to bucket(10, id)
change truncate([name]) to truncate(2, name)

Why are the changes needed?

SortOrder in Iceberg supports FunctionExpression, such as year, month, bucket, truncate, etc.
truncate and bucket functions both have two parameters, such as bucket(10, col1), truncate(2, col2).

However, in gravitino, when converting an iceberg sortorder with bucket or truncate to gravitino sortOrder, there is only one parameter in bucket and truncate functions.

This picture shows the details of the parameters of the bucket and truncate functions in gravitino sortorder, we can test it in com.datastrato.gravitino.catalog.lakehouse.iceberg.converter.TestFromIcebergSortOrder#testFromSortOrder

image

And if we want to convert the gravitino sortOrder with bucket or truncate to iceberg sortOrder, we will get the following error as the first param is missing.

java.lang.IllegalArgumentException: Bucket sort should have 2 arguments

	at com.google.common.base.Preconditions.checkArgument(Preconditions.java:143)
	at com.datastrato.gravitino.catalog.lakehouse.iceberg.converter.ToIcebergSortOrder.toSortOrder(ToIcebergSortOrder.java:56)
	at com.datastrato.gravitino.catalog.lakehouse.iceberg.converter.TestFromIcebergSortOrder.testFromSortOrder(TestFromIcebergSortOrder.java:86)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:725)
	at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)

Fix: #2921

Does this PR introduce any user-facing change?

No

How was this patch tested?

New UTs and ITs.

@caican00
Copy link
Collaborator Author

caican00 commented Apr 15, 2024

Hi @FANNG1 could you help review this PR when you are free? Thanks

@caican00
Copy link
Collaborator Author

Hi @FANNG1 do you have time to review this PR? thanks

@caican00
Copy link
Collaborator Author

Hi @Clearvive could you help review this PR? Thank you

@FANNG1
Copy link
Contributor

FANNG1 commented Apr 16, 2024

@caican00 , sorry for the delay, this PR is related to API which we should check it carefully.

@caican00
Copy link
Collaborator Author

caican00 commented Apr 16, 2024

@caican00 , sorry for the delay, this PR is related to API which we should check it carefully.

It seems that i only added a new api declared as SortOrder functionSortOrder( String name, int width, int id, SortDirection direction, NullOrder nullOrder). cc @FANNG1

@caican00
Copy link
Collaborator Author

gently ping @Clearvive, could you help review this PR when you are free? Thank you

@FANNG1
Copy link
Contributor

FANNG1 commented Apr 18, 2024

gently ping @Clearvive, could you help review this PR when you are free? Thank you

@caican00 , Clearvive if not focused on Gravitino now

@caican00
Copy link
Collaborator Author

gently ping @Clearvive, could you help review this PR when you are free? Thank you

@caican00 , Clearvive if not focused on Gravitino now

got it, thank you @FANNG1
is there anyone else who can help review this PR?

@caican00
Copy link
Collaborator Author

Hi @yuqi1129 could you help review this pr if you are free? Thank you.

@caican00
Copy link
Collaborator Author

@FANNG1 could you please help review this PR? Thank you!

@FANNG1
Copy link
Contributor

FANNG1 commented May 20, 2024

@FANNG1 could you please help review this PR? Thank you!

ok

@caican00
Copy link
Collaborator Author

@mchades @FANNG1 all comments have been addressed, and could you please help review again? Thanks!

@FANNG1
Copy link
Contributor

FANNG1 commented May 22, 2024

LGTM except the comment, @mchades do you have time to review again?

@caican00
Copy link
Collaborator Author

@FANNG1 all comments have been addressed, could you help review again? Thanks!

@FANNG1 FANNG1 merged commit 4d6350a into apache:main May 22, 2024
22 checks passed
github-actions bot pushed a commit that referenced this pull request May 22, 2024
… truncate functions in Gravitino SortOrder (#2928)

### What changes were proposed in this pull request?
Add width param to bucket and truncate functions in Gravitino SortOrder.
for example:
change `bucket([id]) `to `bucket(10, id)`
change `truncate([name]) `to `truncate(2, name)`


### Why are the changes needed? 

SortOrder in Iceberg supports `FunctionExpression`, such as `year,
month, bucket, truncate, etc`.
`truncate` and `bucket` functions both have two parameters, such as
`bucket(10, col1), truncate(2, col2)`.

However, in gravitino, when converting an iceberg sortorder with
`bucket` or `truncate` to gravitino sortOrder, there is only one
parameter in `bucket` and `truncate` functions.

This picture shows the details of the parameters of the `bucket` and
`truncate` functions in gravitino sortorder, we can test it in
`com.datastrato.gravitino.catalog.lakehouse.iceberg.converter.TestFromIcebergSortOrder#testFromSortOrder`


![image](https://github.com/datastrato/gravitino/assets/94670132/06fd65f5-7d33-4197-8871-dda02fd70a26)

And if we want to convert the gravitino sortOrder with `bucket` or
`truncate` to iceberg sortOrder, we will get the following error as the
first param is missing.
```
java.lang.IllegalArgumentException: Bucket sort should have 2 arguments

	at com.google.common.base.Preconditions.checkArgument(Preconditions.java:143)
	at com.datastrato.gravitino.catalog.lakehouse.iceberg.converter.ToIcebergSortOrder.toSortOrder(ToIcebergSortOrder.java:56)
	at com.datastrato.gravitino.catalog.lakehouse.iceberg.converter.TestFromIcebergSortOrder.testFromSortOrder(TestFromIcebergSortOrder.java:86)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:725)
	at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)
```


Fix: #2921

### Does this PR introduce _any_ user-facing change?
No

### How was this patch tested?
New UTs and ITs.
caican00 added a commit to caican00/gravitino that referenced this pull request May 23, 2024
…et and truncate functions in Gravitino SortOrder (apache#2928)

Add width param to bucket and truncate functions in Gravitino SortOrder.
for example:
change `bucket([id]) `to `bucket(10, id)`
change `truncate([name]) `to `truncate(2, name)`

SortOrder in Iceberg supports `FunctionExpression`, such as `year,
month, bucket, truncate, etc`.
`truncate` and `bucket` functions both have two parameters, such as
`bucket(10, col1), truncate(2, col2)`.

However, in gravitino, when converting an iceberg sortorder with
`bucket` or `truncate` to gravitino sortOrder, there is only one
parameter in `bucket` and `truncate` functions.

This picture shows the details of the parameters of the `bucket` and
`truncate` functions in gravitino sortorder, we can test it in
`com.datastrato.gravitino.catalog.lakehouse.iceberg.converter.TestFromIcebergSortOrder#testFromSortOrder`

![image](https://github.com/datastrato/gravitino/assets/94670132/06fd65f5-7d33-4197-8871-dda02fd70a26)

And if we want to convert the gravitino sortOrder with `bucket` or
`truncate` to iceberg sortOrder, we will get the following error as the
first param is missing.
```
java.lang.IllegalArgumentException: Bucket sort should have 2 arguments

	at com.google.common.base.Preconditions.checkArgument(Preconditions.java:143)
	at com.datastrato.gravitino.catalog.lakehouse.iceberg.converter.ToIcebergSortOrder.toSortOrder(ToIcebergSortOrder.java:56)
	at com.datastrato.gravitino.catalog.lakehouse.iceberg.converter.TestFromIcebergSortOrder.testFromSortOrder(TestFromIcebergSortOrder.java:86)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:725)
	at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)
```

Fix: apache#2921

No

New UTs and ITs.
diqiu50 pushed a commit to diqiu50/gravitino that referenced this pull request Jun 13, 2024
…et and truncate functions in Gravitino SortOrder (apache#2928)

### What changes were proposed in this pull request?
Add width param to bucket and truncate functions in Gravitino SortOrder.
for example:
change `bucket([id]) `to `bucket(10, id)`
change `truncate([name]) `to `truncate(2, name)`


### Why are the changes needed? 

SortOrder in Iceberg supports `FunctionExpression`, such as `year,
month, bucket, truncate, etc`.
`truncate` and `bucket` functions both have two parameters, such as
`bucket(10, col1), truncate(2, col2)`.

However, in gravitino, when converting an iceberg sortorder with
`bucket` or `truncate` to gravitino sortOrder, there is only one
parameter in `bucket` and `truncate` functions.

This picture shows the details of the parameters of the `bucket` and
`truncate` functions in gravitino sortorder, we can test it in
`com.datastrato.gravitino.catalog.lakehouse.iceberg.converter.TestFromIcebergSortOrder#testFromSortOrder`


![image](https://github.com/datastrato/gravitino/assets/94670132/06fd65f5-7d33-4197-8871-dda02fd70a26)

And if we want to convert the gravitino sortOrder with `bucket` or
`truncate` to iceberg sortOrder, we will get the following error as the
first param is missing.
```
java.lang.IllegalArgumentException: Bucket sort should have 2 arguments

	at com.google.common.base.Preconditions.checkArgument(Preconditions.java:143)
	at com.datastrato.gravitino.catalog.lakehouse.iceberg.converter.ToIcebergSortOrder.toSortOrder(ToIcebergSortOrder.java:56)
	at com.datastrato.gravitino.catalog.lakehouse.iceberg.converter.TestFromIcebergSortOrder.testFromSortOrder(TestFromIcebergSortOrder.java:86)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:725)
	at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)
```


Fix: apache#2921

### Does this PR introduce _any_ user-facing change?
No

### How was this patch tested?
New UTs and ITs.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[Bug report] bucket and truncate are missing width params in Gravitino SortOrder
3 participants