sqlframe 3.2.0__py3-none-any.whl → 3.3.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- sqlframe/_version.py +2 -2
- sqlframe/base/dataframe.py +5 -1
- sqlframe/base/functions.py +2 -2
- sqlframe/base/session.py +5 -1
- sqlframe/base/util.py +1 -1
- sqlframe/duckdb/readwriter.py +2 -0
- sqlframe/duckdb/session.py +8 -2
- sqlframe/spark/catalog.py +3 -1
- {sqlframe-3.2.0.dist-info → sqlframe-3.3.1.dist-info}/METADATA +6 -6
- {sqlframe-3.2.0.dist-info → sqlframe-3.3.1.dist-info}/RECORD +13 -13
- {sqlframe-3.2.0.dist-info → sqlframe-3.3.1.dist-info}/LICENSE +0 -0
- {sqlframe-3.2.0.dist-info → sqlframe-3.3.1.dist-info}/WHEEL +0 -0
- {sqlframe-3.2.0.dist-info → sqlframe-3.3.1.dist-info}/top_level.txt +0 -0
sqlframe/_version.py
CHANGED
sqlframe/base/dataframe.py
CHANGED
|
@@ -1627,7 +1627,11 @@ class _BaseDataFrame(t.Generic[SESSION, WRITER, NA, STAT, GROUP_DATA]):
|
|
|
1627
1627
|
|
|
1628
1628
|
def createOrReplaceTempView(self, name: str) -> None:
|
|
1629
1629
|
name = normalize_string(name, from_dialect="input")
|
|
1630
|
-
|
|
1630
|
+
df = self.copy()._convert_leaf_to_cte()
|
|
1631
|
+
self.session.temp_views[name] = df
|
|
1632
|
+
self.session.catalog.add_table(
|
|
1633
|
+
name, [x.alias_or_name for x in self._get_outer_select_columns(df.expression)]
|
|
1634
|
+
)
|
|
1631
1635
|
|
|
1632
1636
|
def count(self) -> int:
|
|
1633
1637
|
if not self.session._has_connection:
|
sqlframe/base/functions.py
CHANGED
|
@@ -2052,7 +2052,7 @@ def cardinality(col: ColumnOrName) -> Column:
|
|
|
2052
2052
|
|
|
2053
2053
|
@meta()
|
|
2054
2054
|
def char(col: ColumnOrName) -> Column:
|
|
2055
|
-
return Column
|
|
2055
|
+
return Column(expression.Chr(expressions=Column.ensure_col(col).expression))
|
|
2056
2056
|
|
|
2057
2057
|
|
|
2058
2058
|
@meta(unsupported_engines="*")
|
|
@@ -2703,7 +2703,7 @@ def inline(col: ColumnOrName) -> Column:
|
|
|
2703
2703
|
| 3| 4|
|
|
2704
2704
|
+---+---+
|
|
2705
2705
|
"""
|
|
2706
|
-
return Column.
|
|
2706
|
+
return Column.invoke_expression_over_column(col, expression.Inline)
|
|
2707
2707
|
|
|
2708
2708
|
|
|
2709
2709
|
@meta(unsupported_engines="*")
|
sqlframe/base/session.py
CHANGED
|
@@ -391,7 +391,11 @@ class _BaseSession(t.Generic[CATALOG, READER, WRITER, DF, CONN, UDF_REGISTRATION
|
|
|
391
391
|
)
|
|
392
392
|
if qualify:
|
|
393
393
|
expression = qualify_func(
|
|
394
|
-
expression,
|
|
394
|
+
expression,
|
|
395
|
+
dialect=dialect,
|
|
396
|
+
quote_identifiers=False,
|
|
397
|
+
identify=False,
|
|
398
|
+
schema=self.catalog._schema,
|
|
395
399
|
)
|
|
396
400
|
if self.temp_views:
|
|
397
401
|
replacement_mapping = {}
|
sqlframe/base/util.py
CHANGED
|
@@ -306,7 +306,6 @@ def quote_preserving_alias_or_name(col: t.Union[exp.Column, exp.Alias]) -> str:
|
|
|
306
306
|
def sqlglot_to_spark(sqlglot_dtype: exp.DataType) -> types.DataType:
|
|
307
307
|
from sqlframe.base import types
|
|
308
308
|
|
|
309
|
-
sqlglot_to_spark
|
|
310
309
|
primitive_mapping = {
|
|
311
310
|
exp.DataType.Type.VARCHAR: types.VarcharType,
|
|
312
311
|
exp.DataType.Type.CHAR: types.CharType,
|
|
@@ -325,6 +324,7 @@ def sqlglot_to_spark(sqlglot_dtype: exp.DataType) -> types.DataType:
|
|
|
325
324
|
exp.DataType.Type.TIMESTAMPLTZ: types.TimestampType,
|
|
326
325
|
exp.DataType.Type.TIMESTAMPNTZ: types.TimestampType,
|
|
327
326
|
exp.DataType.Type.DATE: types.DateType,
|
|
327
|
+
exp.DataType.Type.JSON: types.StringType,
|
|
328
328
|
}
|
|
329
329
|
if sqlglot_dtype.this in primitive_mapping:
|
|
330
330
|
pyspark_class = primitive_mapping[sqlglot_dtype.this]
|
sqlframe/duckdb/readwriter.py
CHANGED
|
@@ -93,6 +93,8 @@ class DuckDBDataFrameReader(_BaseDataFrameReader["DuckDBSession", "DuckDBDataFra
|
|
|
93
93
|
else:
|
|
94
94
|
from_clause = f"'{path}'"
|
|
95
95
|
df = self.session.sql(exp.select(*select_columns).from_(from_clause), qualify=False)
|
|
96
|
+
if select_columns == [exp.Star()]:
|
|
97
|
+
return self.load(path=path, format=format, schema=df.schema, **options)
|
|
96
98
|
self.session._last_loaded_file = path # type: ignore
|
|
97
99
|
return df
|
|
98
100
|
|
sqlframe/duckdb/session.py
CHANGED
|
@@ -54,8 +54,14 @@ class DuckDBSession(
|
|
|
54
54
|
|
|
55
55
|
@classmethod
|
|
56
56
|
def _try_get_map(cls, value: t.Any) -> t.Optional[t.Dict[str, t.Any]]:
|
|
57
|
-
if value and isinstance(value, dict)
|
|
58
|
-
|
|
57
|
+
if value and isinstance(value, dict):
|
|
58
|
+
# DuckDB < 1.1.0 support
|
|
59
|
+
if "key" in value and "value" in value:
|
|
60
|
+
return dict(zip(value["key"], value["value"]))
|
|
61
|
+
# DuckDB >= 1.1.0 support
|
|
62
|
+
# If a key is not a string then it must not represent a column and therefore must be a map
|
|
63
|
+
if len([k for k in value if not isinstance(k, str)]) > 0:
|
|
64
|
+
return value
|
|
59
65
|
return None
|
|
60
66
|
|
|
61
67
|
def _execute(self, sql: str) -> None:
|
sqlframe/spark/catalog.py
CHANGED
|
@@ -569,7 +569,9 @@ class SparkCatalog(
|
|
|
569
569
|
return [
|
|
570
570
|
Table(
|
|
571
571
|
name=normalize_string(x.name, from_dialect="execution", to_dialect="output"),
|
|
572
|
-
catalog=normalize_string(x.catalog, from_dialect="execution", to_dialect="output")
|
|
572
|
+
catalog=normalize_string(x.catalog, from_dialect="execution", to_dialect="output")
|
|
573
|
+
if x.catalog
|
|
574
|
+
else None,
|
|
573
575
|
namespace=[
|
|
574
576
|
normalize_string(y, from_dialect="execution", to_dialect="output")
|
|
575
577
|
for y in x.namespace
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: sqlframe
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.3.1
|
|
4
4
|
Summary: Turning PySpark Into a Universal DataFrame API
|
|
5
5
|
Home-page: https://github.com/eakmanrq/sqlframe
|
|
6
6
|
Author: Ryan Eakman
|
|
@@ -18,16 +18,16 @@ Requires-Python: >=3.8
|
|
|
18
18
|
Description-Content-Type: text/markdown
|
|
19
19
|
License-File: LICENSE
|
|
20
20
|
Requires-Dist: prettytable (<3.11.1)
|
|
21
|
-
Requires-Dist: sqlglot (<25.
|
|
21
|
+
Requires-Dist: sqlglot (<25.23,>=24.0.0)
|
|
22
22
|
Requires-Dist: typing-extensions (<5,>=4.8)
|
|
23
23
|
Provides-Extra: bigquery
|
|
24
24
|
Requires-Dist: google-cloud-bigquery-storage (<3,>=2) ; extra == 'bigquery'
|
|
25
25
|
Requires-Dist: google-cloud-bigquery[pandas] (<4,>=3) ; extra == 'bigquery'
|
|
26
26
|
Provides-Extra: dev
|
|
27
|
-
Requires-Dist: duckdb (<1.
|
|
27
|
+
Requires-Dist: duckdb (<1.2,>=0.9) ; extra == 'dev'
|
|
28
28
|
Requires-Dist: findspark (<3,>=2) ; extra == 'dev'
|
|
29
29
|
Requires-Dist: mypy (<1.12,>=1.10.0) ; extra == 'dev'
|
|
30
|
-
Requires-Dist: openai (<1.
|
|
30
|
+
Requires-Dist: openai (<1.48,>=1.30) ; extra == 'dev'
|
|
31
31
|
Requires-Dist: pandas-stubs (<3,>=2) ; extra == 'dev'
|
|
32
32
|
Requires-Dist: pandas (<3,>=2) ; extra == 'dev'
|
|
33
33
|
Requires-Dist: psycopg (<4,>=3.1) ; extra == 'dev'
|
|
@@ -47,10 +47,10 @@ Requires-Dist: mkdocs-material (==9.0.5) ; extra == 'docs'
|
|
|
47
47
|
Requires-Dist: mkdocs (==1.4.2) ; extra == 'docs'
|
|
48
48
|
Requires-Dist: pymdown-extensions ; extra == 'docs'
|
|
49
49
|
Provides-Extra: duckdb
|
|
50
|
-
Requires-Dist: duckdb (<1.
|
|
50
|
+
Requires-Dist: duckdb (<1.2,>=0.9) ; extra == 'duckdb'
|
|
51
51
|
Requires-Dist: pandas (<3,>=2) ; extra == 'duckdb'
|
|
52
52
|
Provides-Extra: openai
|
|
53
|
-
Requires-Dist: openai (<1.
|
|
53
|
+
Requires-Dist: openai (<1.48,>=1.30) ; extra == 'openai'
|
|
54
54
|
Provides-Extra: pandas
|
|
55
55
|
Requires-Dist: pandas (<3,>=2) ; extra == 'pandas'
|
|
56
56
|
Provides-Extra: postgres
|
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
sqlframe/__init__.py,sha256=E3qCJ4PSEgKz6Hg3ves6LWt3JrQOV8c9HVLSIUOzKNc,3106
|
|
2
|
-
sqlframe/_version.py,sha256=
|
|
2
|
+
sqlframe/_version.py,sha256=kgjiv6RGaxXEtlEXqn4D_sBXv_DSClZBtjMcTFwo908,411
|
|
3
3
|
sqlframe/base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
4
|
sqlframe/base/_typing.py,sha256=b2clI5HI1zEZKB_3Msx3FeAJQyft44ubUifJwQRVXyQ,1298
|
|
5
5
|
sqlframe/base/catalog.py,sha256=SzFQalTWdhWzxUY-4ut1f9TfOECp_JmJEgNPfrRKCe0,38457
|
|
6
6
|
sqlframe/base/column.py,sha256=C2xj6OHMsJbEgjbI-m5HuIvqHYt2DbbUtCjssKpplNk,17748
|
|
7
|
-
sqlframe/base/dataframe.py,sha256=
|
|
7
|
+
sqlframe/base/dataframe.py,sha256=uTM46auSPniww-ZMtI5s0hrrCG1nOICMEhdZZ8E4cu8,71636
|
|
8
8
|
sqlframe/base/decorators.py,sha256=Jy4bf8MhZ-AJ6CWTj59bBJRqamtLbPC0USUMFrY6g0w,449
|
|
9
9
|
sqlframe/base/exceptions.py,sha256=9Uwvqn2eAkDpqm4BrRgbL61qM-GMCbJEMAW8otxO46s,370
|
|
10
10
|
sqlframe/base/function_alternatives.py,sha256=IxNBqplehkAEkpzA625Dif-9Xyi4Hrho81A9U262rV0,50714
|
|
11
|
-
sqlframe/base/functions.py,sha256=
|
|
11
|
+
sqlframe/base/functions.py,sha256=p1aVgQ3htTLR5-mDzDtEh7W3iTcbt_XOOljLpza-dF8,189984
|
|
12
12
|
sqlframe/base/group.py,sha256=fsyG5990_Pd7gFPjTFrH9IEoAquL_wEkVpIlBAIkZJU,4091
|
|
13
13
|
sqlframe/base/normalize.py,sha256=nXAJ5CwxVf4DV0GsH-q1w0p8gmjSMlv96k_ez1eVul8,3880
|
|
14
14
|
sqlframe/base/operations.py,sha256=-AhNuEzcV7ZExoP1oY3blaKip-joQyJeQVvfBTs_2g4,3456
|
|
15
15
|
sqlframe/base/readerwriter.py,sha256=FkImnUR_qNASmXktk0JDsFeOzfh799hd09vI2uznNH8,25350
|
|
16
|
-
sqlframe/base/session.py,sha256=
|
|
16
|
+
sqlframe/base/session.py,sha256=6vQ2bJa357J1bycx1vMxkIUdcA2YbMIYq956bpytztI,25256
|
|
17
17
|
sqlframe/base/transforms.py,sha256=y0j3SGDz3XCmNGrvassk1S-owllUWfkHyMgZlY6SFO4,467
|
|
18
18
|
sqlframe/base/types.py,sha256=iBNk9bpFtb2NBIogYS8i7OlQZMRvpR6XxqzBebsjQDU,12280
|
|
19
19
|
sqlframe/base/udf.py,sha256=O6hMhBUy9NVv-mhJRtfFhXTIa_-Z8Y_FkmmuOHu0l90,1117
|
|
20
|
-
sqlframe/base/util.py,sha256=
|
|
20
|
+
sqlframe/base/util.py,sha256=9f_PpaQTDOrdKVAZeGdK9s5KQ_fL2vM8A2uulo-E1Pg,14908
|
|
21
21
|
sqlframe/base/window.py,sha256=8hOv-ignPPIsZA9FzvYzcLE9J_glalVaYjIAUdRUX3o,4943
|
|
22
22
|
sqlframe/base/mixins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
23
23
|
sqlframe/base/mixins/catalog_mixins.py,sha256=9tn0mK8oPoqIIjNItystD5tdBMdK9YpkxTG7G9KQl8k,18619
|
|
@@ -42,8 +42,8 @@ sqlframe/duckdb/dataframe.py,sha256=HZg_uMAz4RsubZJT4-MslUQS_0-InF0_P5Yq5HyJ3wE,
|
|
|
42
42
|
sqlframe/duckdb/functions.py,sha256=Ee8o6YFtRdEiq0jNLXxgu5lcbc7Tsg0-lK6oRyxdcjo,1920
|
|
43
43
|
sqlframe/duckdb/functions.pyi,sha256=Qn6j4zwwuBsh6q9341dR3Z5kpeRsgvM4u6Bb6FekKrI,5827
|
|
44
44
|
sqlframe/duckdb/group.py,sha256=IkhbW42Ng1U5YT3FkIdiB4zBqRkW4QyTb-1detY1e_4,383
|
|
45
|
-
sqlframe/duckdb/readwriter.py,sha256=
|
|
46
|
-
sqlframe/duckdb/session.py,sha256=
|
|
45
|
+
sqlframe/duckdb/readwriter.py,sha256=iY0Wsms35gymilETOhAQGQCHfH8LCj9_uY8aCdF77ds,4806
|
|
46
|
+
sqlframe/duckdb/session.py,sha256=h0gr4hzGTLTSYN2OECAYjb8HHh2QvSshInxAIUjEEs8,2615
|
|
47
47
|
sqlframe/duckdb/types.py,sha256=KwNyuXIo-2xVVd4bZED3YrQOobKCtemlxGrJL7DrTC8,34
|
|
48
48
|
sqlframe/duckdb/udf.py,sha256=Du9LnOtT1lJvB90D4HSR2tB7MXy179jZngDR-EjVjQk,656
|
|
49
49
|
sqlframe/duckdb/window.py,sha256=6GKPzuxeSapJakBaKBeT9VpED1ACdjggDv9JRILDyV0,35
|
|
@@ -83,7 +83,7 @@ sqlframe/snowflake/types.py,sha256=KwNyuXIo-2xVVd4bZED3YrQOobKCtemlxGrJL7DrTC8,3
|
|
|
83
83
|
sqlframe/snowflake/udf.py,sha256=yzMmky-n5BXFbdldgfzLP8hCrVm0DgruSUCUUy1_3sk,268
|
|
84
84
|
sqlframe/snowflake/window.py,sha256=6GKPzuxeSapJakBaKBeT9VpED1ACdjggDv9JRILDyV0,35
|
|
85
85
|
sqlframe/spark/__init__.py,sha256=QV0eNmY5fL4ulLvAJVVVx2OYFfQXN2KYV3R5cij7HTg,858
|
|
86
|
-
sqlframe/spark/catalog.py,sha256=
|
|
86
|
+
sqlframe/spark/catalog.py,sha256=8ghHiKz9rBJ2ohm768XIftyi9Htbw-1cSkJUlXemwrI,39796
|
|
87
87
|
sqlframe/spark/column.py,sha256=E1tUa62Y5HajkhgFuebU9zohrGyieudcHzTT8gfalio,40
|
|
88
88
|
sqlframe/spark/dataframe.py,sha256=_TD-h7oz0-i80r90v17UoLDoIzcGNchU2SL13ujOOic,1779
|
|
89
89
|
sqlframe/spark/functions.py,sha256=AQfqfvaojJzCuo9DyDklz0JYZPhn_3dzWvztsklBO0o,586
|
|
@@ -107,8 +107,8 @@ sqlframe/standalone/udf.py,sha256=azmgtUjHNIPs0WMVNId05SHwiYn41MKVBhKXsQJ5dmY,27
|
|
|
107
107
|
sqlframe/standalone/window.py,sha256=6GKPzuxeSapJakBaKBeT9VpED1ACdjggDv9JRILDyV0,35
|
|
108
108
|
sqlframe/testing/__init__.py,sha256=VVCosQhitU74A3NnE52O4mNtGZONapuEXcc20QmSlnQ,132
|
|
109
109
|
sqlframe/testing/utils.py,sha256=9DDYVuocO7tygee3RaajuJNZ24sJwf_LY556kKg7kTw,13011
|
|
110
|
-
sqlframe-3.
|
|
111
|
-
sqlframe-3.
|
|
112
|
-
sqlframe-3.
|
|
113
|
-
sqlframe-3.
|
|
114
|
-
sqlframe-3.
|
|
110
|
+
sqlframe-3.3.1.dist-info/LICENSE,sha256=VZu79YgW780qxaFJMr0t5ZgbOYEh04xWoxaWOaqIGWk,1068
|
|
111
|
+
sqlframe-3.3.1.dist-info/METADATA,sha256=SPW_z2bAjr0_jJPP-BNREOJAgwhMmecPt11oqPpcv4E,8639
|
|
112
|
+
sqlframe-3.3.1.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
|
|
113
|
+
sqlframe-3.3.1.dist-info/top_level.txt,sha256=T0_RpoygaZSF6heeWwIDQgaP0varUdSK1pzjeJZRjM8,9
|
|
114
|
+
sqlframe-3.3.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|