|
9 | 9 |
|
10 | 10 | from deltalake._util import encode_partition_value |
11 | 11 | from deltalake.exceptions import DeltaProtocolError |
| 12 | +from deltalake.query import QueryBuilder |
12 | 13 | from deltalake.table import ProtocolVersions |
13 | 14 | from deltalake.writer import write_deltalake |
14 | 15 |
|
@@ -946,3 +947,56 @@ def test_is_deltatable_with_storage_opts(): |
946 | 947 | "DELTA_DYNAMO_TABLE_NAME": "custom_table_name", |
947 | 948 | } |
948 | 949 | assert DeltaTable.is_deltatable(table_path, storage_options=storage_options) |
| 950 | + |
| 951 | + |
| 952 | +def test_read_query_builder(): |
| 953 | + table_path = "../crates/test/tests/data/delta-0.8.0-partitioned" |
| 954 | + dt = DeltaTable(table_path) |
| 955 | + expected = { |
| 956 | + "value": ["4", "5", "6", "7"], |
| 957 | + "year": ["2021", "2021", "2021", "2021"], |
| 958 | + "month": ["4", "12", "12", "12"], |
| 959 | + "day": ["5", "4", "20", "20"], |
| 960 | + } |
| 961 | + actual = pa.Table.from_batches( |
| 962 | + QueryBuilder() |
| 963 | + .register("tbl", dt) |
| 964 | + .execute("SELECT * FROM tbl WHERE year >= 2021 ORDER BY value") |
| 965 | + ).to_pydict() |
| 966 | + assert expected == actual |
| 967 | + |
| 968 | + |
| 969 | +def test_read_query_builder_join_multiple_tables(tmp_path): |
| 970 | + table_path = "../crates/test/tests/data/delta-0.8.0-date" |
| 971 | + dt1 = DeltaTable(table_path) |
| 972 | + |
| 973 | + write_deltalake( |
| 974 | + tmp_path, |
| 975 | + pa.table( |
| 976 | + { |
| 977 | + "date": ["2021-01-01", "2021-01-02", "2021-01-03", "2021-12-31"], |
| 978 | + "value": ["a", "b", "c", "d"], |
| 979 | + } |
| 980 | + ), |
| 981 | + ) |
| 982 | + dt2 = DeltaTable(tmp_path) |
| 983 | + |
| 984 | + expected = { |
| 985 | + "date": ["2021-01-01", "2021-01-02", "2021-01-03"], |
| 986 | + "dayOfYear": [1, 2, 3], |
| 987 | + "value": ["a", "b", "c"], |
| 988 | + } |
| 989 | + actual = pa.Table.from_batches( |
| 990 | + QueryBuilder() |
| 991 | + .register("tbl1", dt1) |
| 992 | + .register("tbl2", dt2) |
| 993 | + .execute( |
| 994 | + """ |
| 995 | + SELECT tbl2.date, tbl1.dayOfYear, tbl2.value |
| 996 | + FROM tbl1 |
| 997 | + INNER JOIN tbl2 ON tbl1.date = tbl2.date |
| 998 | + ORDER BY tbl1.date |
| 999 | + """ |
| 1000 | + ) |
| 1001 | + ).to_pydict() |
| 1002 | + assert expected == actual |
0 commit comments