-
Notifications
You must be signed in to change notification settings - Fork 94
feat: DH-21235: Column Restriction JS API #7956
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
base: main
Are you sure you want to change the base?
Changes from 35 commits
31b668e
aa2f17d
55145d3
180bc15
6939127
75bf43e
89ac34c
b7cb56f
962de5e
e7d828e
65f3327
fce1f27
feed9b9
14a5807
19e610c
3822538
367b534
7166a51
a8f75ec
5d70e42
1aebf50
3f79ede
5a994f8
24a801c
fb54116
d133755
9cad852
0c5b003
a1d704f
e328238
28f86d9
a9394c5
4c21aa5
5b5b291
1d00622
136a5b4
3fe5ae7
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| {"file":"how-to-guides/input-tables.md","objects":{"_source":{"type":"Table","data":{"columns":[{"name":"Key","type":"java.lang.String"},{"name":"IntValue","type":"int"},{"name":"DoubleValue","type":"double"},{"name":"Category","type":"java.lang.String"},{"name":"Description","type":"java.lang.String"}],"rows":[[{"value":"Apple"},{"value":"1"},{"value":"1.5000"},{"value":"Fruit"},{"value":"Red"}],[{"value":"Banana"},{"value":"2"},{"value":"2.5000"},{"value":"Fruit"},{"value":"Yellow"}],[{"value":"Carrot"},{"value":"3"},{"value":"3.5000"},{"value":"Vegetable"},{"value":"Orange"}],[{"value":"Date"},{"value":"50"},{"value":"50.5000"},{"value":"Fruit"},{"value":"Sweet"}],[{"value":"Eggplant"},{"value":"75"},{"value":"75.5000"},{"value":"Vegetable"},{"value":"Purple"}]]}},"intRangeValidator":{"type":"Table","data":{"columns":[{"name":"Key","type":"java.lang.String"},{"name":"IntValue","type":"int"},{"name":"DoubleValue","type":"double"},{"name":"Category","type":"java.lang.String"},{"name":"Description","type":"java.lang.String"}],"rows":[[{"value":"Apple"},{"value":"1"},{"value":"1.5000"},{"value":"Fruit"},{"value":"Red"}],[{"value":"Banana"},{"value":"2"},{"value":"2.5000"},{"value":"Fruit"},{"value":"Yellow"}],[{"value":"Carrot"},{"value":"3"},{"value":"3.5000"},{"value":"Vegetable"},{"value":"Orange"}],[{"value":"Date"},{"value":"50"},{"value":"50.5000"},{"value":"Fruit"},{"value":"Sweet"}],[{"value":"Eggplant"},{"value":"75"},{"value":"75.5000"},{"value":"Vegetable"},{"value":"Purple"}]]}},"doubleRangeValidator":{"type":"Table","data":{"columns":[{"name":"Key","type":"java.lang.String"},{"name":"IntValue","type":"int"},{"name":"DoubleValue","type":"double"},{"name":"Category","type":"java.lang.String"},{"name":"Description","type":"java.lang.String"}],"rows":[[{"value":"Apple"},{"value":"1"},{"value":"1.5000"},{"value":"Fruit"},{"value":"Red"}],[{"value":"Banana"},{"value":"2"},{"value":"2.5000"},{"value":"Fruit"},{"value":"Yellow"}],[{"value":"Carrot"},{"value":"3"},{"value":"3.5000"},{"value":"Vegetable"},{"value":"Orange"}],[{"value":"Date"},{"value":"50"},{"value":"50.5000"},{"value":"Fruit"},{"value":"Sweet"}],[{"value":"Eggplant"},{"value":"75"},{"value":"75.5000"},{"value":"Vegetable"},{"value":"Purple"}]]}},"notNullValidator":{"type":"Table","data":{"columns":[{"name":"Key","type":"java.lang.String"},{"name":"IntValue","type":"int"},{"name":"DoubleValue","type":"double"},{"name":"Category","type":"java.lang.String"},{"name":"Description","type":"java.lang.String"}],"rows":[[{"value":"Apple"},{"value":"1"},{"value":"1.5000"},{"value":"Fruit"},{"value":"Red"}],[{"value":"Banana"},{"value":"2"},{"value":"2.5000"},{"value":"Fruit"},{"value":"Yellow"}],[{"value":"Carrot"},{"value":"3"},{"value":"3.5000"},{"value":"Vegetable"},{"value":"Orange"}],[{"value":"Date"},{"value":"50"},{"value":"50.5000"},{"value":"Fruit"},{"value":"Sweet"}],[{"value":"Eggplant"},{"value":"75"},{"value":"75.5000"},{"value":"Vegetable"},{"value":"Purple"}]]}},"notNullValidatorInt":{"type":"Table","data":{"columns":[{"name":"Key","type":"java.lang.String"},{"name":"IntValue","type":"int"},{"name":"DoubleValue","type":"double"},{"name":"Category","type":"java.lang.String"},{"name":"Description","type":"java.lang.String"}],"rows":[[{"value":"Apple"},{"value":"1"},{"value":"1.5000"},{"value":"Fruit"},{"value":"Red"}],[{"value":"Banana"},{"value":"2"},{"value":"2.5000"},{"value":"Fruit"},{"value":"Yellow"}],[{"value":"Carrot"},{"value":"3"},{"value":"3.5000"},{"value":"Vegetable"},{"value":"Orange"}],[{"value":"Date"},{"value":"50"},{"value":"50.5000"},{"value":"Fruit"},{"value":"Sweet"}],[{"value":"Eggplant"},{"value":"75"},{"value":"75.5000"},{"value":"Vegetable"},{"value":"Purple"}]]}},"nonEmptyValidator":{"type":"Table","data":{"columns":[{"name":"Key","type":"java.lang.String"},{"name":"IntValue","type":"int"},{"name":"DoubleValue","type":"double"},{"name":"Category","type":"java.lang.String"},{"name":"Description","type":"java.lang.String"}],"rows":[[{"value":"Apple"},{"value":"1"},{"value":"1.5000"},{"value":"Fruit"},{"value":"Red"}],[{"value":"Banana"},{"value":"2"},{"value":"2.5000"},{"value":"Fruit"},{"value":"Yellow"}],[{"value":"Carrot"},{"value":"3"},{"value":"3.5000"},{"value":"Vegetable"},{"value":"Orange"}],[{"value":"Date"},{"value":"50"},{"value":"50.5000"},{"value":"Fruit"},{"value":"Sweet"}],[{"value":"Eggplant"},{"value":"75"},{"value":"75.5000"},{"value":"Vegetable"},{"value":"Purple"}]]}},"stringListValidator":{"type":"Table","data":{"columns":[{"name":"Key","type":"java.lang.String"},{"name":"IntValue","type":"int"},{"name":"DoubleValue","type":"double"},{"name":"Category","type":"java.lang.String"},{"name":"Description","type":"java.lang.String"}],"rows":[[{"value":"Apple"},{"value":"1"},{"value":"1.5000"},{"value":"Fruit"},{"value":"Red"}],[{"value":"Banana"},{"value":"2"},{"value":"2.5000"},{"value":"Fruit"},{"value":"Yellow"}],[{"value":"Carrot"},{"value":"3"},{"value":"3.5000"},{"value":"Vegetable"},{"value":"Orange"}],[{"value":"Date"},{"value":"50"},{"value":"50.5000"},{"value":"Fruit"},{"value":"Sweet"}],[{"value":"Eggplant"},{"value":"75"},{"value":"75.5000"},{"value":"Vegetable"},{"value":"Purple"}]]}}}} |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -222,6 +222,91 @@ result = input_table(col_defs=my_col_defs) | |
|
|
||
|  | ||
|
|
||
| ## Input table validators | ||
|
|
||
| Input table validators allow you to add validation rules to input tables, ensuring that data entered (either programmatically or manually through the UI) meets specific criteria. Validators wrap an existing input table and check data before it's added, throwing validation exceptions if the data doesn't meet the requirements. | ||
|
|
||
| Deephaven provides several built-in validators: | ||
|
|
||
| - **RangeValidatingInputTable** - Validates that integer values fall within a specified range (min/max inclusive) | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Same edits to Python, but also update to snake_case
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I updated style in the python doc to match groovy for this list. But I'm not sure we should change to snake_case. The python code refers to these class using the Java camel case:
|
||
| - **DoubleRangeValidatingInputTable** - Validates that double values fall within a specified range (min/max inclusive) | ||
| - **NotNullValidatingInputTable** - Validates that values in a column are not null | ||
| - **NonEmptyValidatingInputTable** - Validates that string values are not empty | ||
| - **StringListValidatingInputTable** - Validates that string values belong to a predefined set of allowed values | ||
|
|
||
| ### Creating validated input tables | ||
|
|
||
| To create a validated input table, first create a base input table, then wrap it with one or more validators. Here's an example showing all available validators: | ||
|
|
||
| ```python order=int_range_validator,double_range_validator,not_null_validator,not_null_validator_int,non_empty_validator,string_list_validator | ||
| from deephaven import new_table, input_table | ||
| from deephaven.column import string_col, int_col, double_col | ||
|
|
||
| # Create source table with various column types | ||
| source = new_table( | ||
| [ | ||
| string_col("Key", ["Apple", "Banana", "Carrot", "Date", "Eggplant"]), | ||
| int_col("IntValue", [1, 2, 3, 50, 75]), | ||
| double_col("DoubleValue", [1.5, 2.5, 3.5, 50.5, 75.5]), | ||
| string_col("Category", ["Fruit", "Fruit", "Vegetable", "Fruit", "Vegetable"]), | ||
| string_col("Description", ["Red", "Yellow", "Orange", "Sweet", "Purple"]), | ||
| ] | ||
| ) | ||
|
|
||
| # Import Java classes for validators (not available in Python API yet) | ||
| import jpy | ||
|
|
||
| range_validating_input_table = jpy.get_type( | ||
| "io.deephaven.server.table.inputtables.RangeValidatingInputTable" | ||
| ) | ||
| double_range_validating_input_table = jpy.get_type( | ||
| "io.deephaven.server.table.inputtables.DoubleRangeValidatingInputTable" | ||
| ) | ||
| not_null_validating_input_table = jpy.get_type( | ||
| "io.deephaven.server.table.inputtables.NotNullValidatingInputTable" | ||
| ) | ||
| non_empty_validating_input_table = jpy.get_type( | ||
| "io.deephaven.server.table.inputtables.NonEmptyValidatingInputTable" | ||
| ) | ||
| string_list_validating_input_table = jpy.get_type( | ||
| "io.deephaven.server.table.inputtables.StringListValidatingInputTable" | ||
| ) | ||
|
|
||
| # Example 1: Integer Range Validator (0-100) | ||
| int_range_validator = range_validating_input_table.make( | ||
| input_table(init_table=source, key_cols="Key").j_table, "IntValue", 0, 100 | ||
| ) | ||
|
|
||
| # Example 2: Double Range Validator (0.0-100.0) | ||
| double_range_validator = double_range_validating_input_table.make( | ||
| input_table(init_table=source, key_cols="Key").j_table, "DoubleValue", 0.0, 100.0 | ||
| ) | ||
|
|
||
| # Example 3: Not Null Validator on Category column | ||
| not_null_validator = not_null_validating_input_table.make( | ||
| input_table(init_table=source, key_cols="Key").j_table, "Category" | ||
| ) | ||
|
|
||
| # Example 3.1: Not Null Validator on IntValue column | ||
| not_null_validator_int = not_null_validating_input_table.make( | ||
| input_table(init_table=source, key_cols="Key").j_table, "IntValue" | ||
| ) | ||
|
|
||
| # Example 4: Non-Empty Validator on Description column | ||
| non_empty_validator = non_empty_validating_input_table.make( | ||
| input_table(init_table=source, key_cols="Key").j_table, "Description" | ||
| ) | ||
|
|
||
| # Example 5: String List Validator - Category must be "Fruit" or "Vegetable" | ||
| string_list_validator = string_list_validating_input_table.make( | ||
| input_table(init_table=source, key_cols="Key").j_table, | ||
| "Category", | ||
| "Fruit", | ||
| "Vegetable", | ||
| "Grain", | ||
| ) | ||
| ``` | ||
|
|
||
| ## Related documentation | ||
|
|
||
| - [`input_table`](../reference/table-operations/create/input-table.md) | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| {"file":"how-to-guides/input-tables.md","objects":{"source":{"type":"Table","data":{"columns":[{"name":"Key","type":"java.lang.String"},{"name":"IntValue","type":"int"},{"name":"DoubleValue","type":"double"},{"name":"Category","type":"java.lang.String"},{"name":"Description","type":"java.lang.String"}],"rows":[[{"value":"Apple"},{"value":"1"},{"value":"1.5000"},{"value":"Fruit"},{"value":"Red"}],[{"value":"Banana"},{"value":"2"},{"value":"2.5000"},{"value":"Fruit"},{"value":"Yellow"}],[{"value":"Carrot"},{"value":"3"},{"value":"3.5000"},{"value":"Vegetable"},{"value":"Orange"}],[{"value":"Date"},{"value":"50"},{"value":"50.5000"},{"value":"Fruit"},{"value":"Sweet"}],[{"value":"Eggplant"},{"value":"75"},{"value":"75.5000"},{"value":"Vegetable"},{"value":"Purple"}]]}},"int_range_validator":{"type":"Table","data":{"columns":[{"name":"Key","type":"java.lang.String"},{"name":"IntValue","type":"int"},{"name":"DoubleValue","type":"double"},{"name":"Category","type":"java.lang.String"},{"name":"Description","type":"java.lang.String"}],"rows":[[{"value":"Apple"},{"value":"1"},{"value":"1.5000"},{"value":"Fruit"},{"value":"Red"}],[{"value":"Banana"},{"value":"2"},{"value":"2.5000"},{"value":"Fruit"},{"value":"Yellow"}],[{"value":"Carrot"},{"value":"3"},{"value":"3.5000"},{"value":"Vegetable"},{"value":"Orange"}],[{"value":"Date"},{"value":"50"},{"value":"50.5000"},{"value":"Fruit"},{"value":"Sweet"}],[{"value":"Eggplant"},{"value":"75"},{"value":"75.5000"},{"value":"Vegetable"},{"value":"Purple"}]]}},"double_range_validator":{"type":"Table","data":{"columns":[{"name":"Key","type":"java.lang.String"},{"name":"IntValue","type":"int"},{"name":"DoubleValue","type":"double"},{"name":"Category","type":"java.lang.String"},{"name":"Description","type":"java.lang.String"}],"rows":[[{"value":"Apple"},{"value":"1"},{"value":"1.5000"},{"value":"Fruit"},{"value":"Red"}],[{"value":"Banana"},{"value":"2"},{"value":"2.5000"},{"value":"Fruit"},{"value":"Yellow"}],[{"value":"Carrot"},{"value":"3"},{"value":"3.5000"},{"value":"Vegetable"},{"value":"Orange"}],[{"value":"Date"},{"value":"50"},{"value":"50.5000"},{"value":"Fruit"},{"value":"Sweet"}],[{"value":"Eggplant"},{"value":"75"},{"value":"75.5000"},{"value":"Vegetable"},{"value":"Purple"}]]}},"not_null_validator":{"type":"Table","data":{"columns":[{"name":"Key","type":"java.lang.String"},{"name":"IntValue","type":"int"},{"name":"DoubleValue","type":"double"},{"name":"Category","type":"java.lang.String"},{"name":"Description","type":"java.lang.String"}],"rows":[[{"value":"Apple"},{"value":"1"},{"value":"1.5000"},{"value":"Fruit"},{"value":"Red"}],[{"value":"Banana"},{"value":"2"},{"value":"2.5000"},{"value":"Fruit"},{"value":"Yellow"}],[{"value":"Carrot"},{"value":"3"},{"value":"3.5000"},{"value":"Vegetable"},{"value":"Orange"}],[{"value":"Date"},{"value":"50"},{"value":"50.5000"},{"value":"Fruit"},{"value":"Sweet"}],[{"value":"Eggplant"},{"value":"75"},{"value":"75.5000"},{"value":"Vegetable"},{"value":"Purple"}]]}},"not_null_validator_int":{"type":"Table","data":{"columns":[{"name":"Key","type":"java.lang.String"},{"name":"IntValue","type":"int"},{"name":"DoubleValue","type":"double"},{"name":"Category","type":"java.lang.String"},{"name":"Description","type":"java.lang.String"}],"rows":[[{"value":"Apple"},{"value":"1"},{"value":"1.5000"},{"value":"Fruit"},{"value":"Red"}],[{"value":"Banana"},{"value":"2"},{"value":"2.5000"},{"value":"Fruit"},{"value":"Yellow"}],[{"value":"Carrot"},{"value":"3"},{"value":"3.5000"},{"value":"Vegetable"},{"value":"Orange"}],[{"value":"Date"},{"value":"50"},{"value":"50.5000"},{"value":"Fruit"},{"value":"Sweet"}],[{"value":"Eggplant"},{"value":"75"},{"value":"75.5000"},{"value":"Vegetable"},{"value":"Purple"}]]}},"non_empty_validator":{"type":"Table","data":{"columns":[{"name":"Key","type":"java.lang.String"},{"name":"IntValue","type":"int"},{"name":"DoubleValue","type":"double"},{"name":"Category","type":"java.lang.String"},{"name":"Description","type":"java.lang.String"}],"rows":[[{"value":"Apple"},{"value":"1"},{"value":"1.5000"},{"value":"Fruit"},{"value":"Red"}],[{"value":"Banana"},{"value":"2"},{"value":"2.5000"},{"value":"Fruit"},{"value":"Yellow"}],[{"value":"Carrot"},{"value":"3"},{"value":"3.5000"},{"value":"Vegetable"},{"value":"Orange"}],[{"value":"Date"},{"value":"50"},{"value":"50.5000"},{"value":"Fruit"},{"value":"Sweet"}],[{"value":"Eggplant"},{"value":"75"},{"value":"75.5000"},{"value":"Vegetable"},{"value":"Purple"}]]}},"string_list_validator":{"type":"Table","data":{"columns":[{"name":"Key","type":"java.lang.String"},{"name":"IntValue","type":"int"},{"name":"DoubleValue","type":"double"},{"name":"Category","type":"java.lang.String"},{"name":"Description","type":"java.lang.String"}],"rows":[[{"value":"Apple"},{"value":"1"},{"value":"1.5000"},{"value":"Fruit"},{"value":"Red"}],[{"value":"Banana"},{"value":"2"},{"value":"2.5000"},{"value":"Fruit"},{"value":"Yellow"}],[{"value":"Carrot"},{"value":"3"},{"value":"3.5000"},{"value":"Vegetable"},{"value":"Orange"}],[{"value":"Date"},{"value":"50"},{"value":"50.5000"},{"value":"Fruit"},{"value":"Sweet"}],[{"value":"Eggplant"},{"value":"75"},{"value":"75.5000"},{"value":"Vegetable"},{"value":"Purple"}]]}}}} |
Uh oh!
There was an error while loading. Please reload this page.