sqlframe 2.3.0__py3-none-any.whl → 3.0.0__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/__init__.py +83 -0
- sqlframe/_version.py +2 -2
- sqlframe/base/column.py +3 -1
- sqlframe/base/dataframe.py +11 -1
- sqlframe/base/function_alternatives.py +24 -1
- sqlframe/base/session.py +4 -0
- sqlframe/bigquery/__init__.py +11 -2
- sqlframe/bigquery/session.py +1 -2
- sqlframe/duckdb/__init__.py +12 -3
- sqlframe/duckdb/column.py +1 -1
- sqlframe/duckdb/dataframe.py +11 -5
- sqlframe/duckdb/functions.py +1 -0
- sqlframe/duckdb/functions.pyi +1 -1
- sqlframe/duckdb/session.py +1 -2
- sqlframe/postgres/__init__.py +11 -2
- sqlframe/postgres/functions.py +1 -0
- sqlframe/postgres/functions.pyi +1 -1
- sqlframe/postgres/session.py +1 -2
- sqlframe/redshift/__init__.py +11 -2
- sqlframe/redshift/session.py +1 -2
- sqlframe/snowflake/__init__.py +7 -1
- sqlframe/snowflake/session.py +1 -2
- sqlframe/spark/__init__.py +11 -2
- sqlframe/spark/session.py +1 -2
- sqlframe/standalone/__init__.py +7 -1
- sqlframe/standalone/session.py +1 -2
- {sqlframe-2.3.0.dist-info → sqlframe-3.0.0.dist-info}/METADATA +59 -30
- {sqlframe-2.3.0.dist-info → sqlframe-3.0.0.dist-info}/RECORD +31 -31
- {sqlframe-2.3.0.dist-info → sqlframe-3.0.0.dist-info}/LICENSE +0 -0
- {sqlframe-2.3.0.dist-info → sqlframe-3.0.0.dist-info}/WHEEL +0 -0
- {sqlframe-2.3.0.dist-info → sqlframe-3.0.0.dist-info}/top_level.txt +0 -0
sqlframe/__init__.py
CHANGED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import importlib
|
|
4
|
+
import sys
|
|
5
|
+
import typing as t
|
|
6
|
+
from unittest.mock import MagicMock
|
|
7
|
+
|
|
8
|
+
if t.TYPE_CHECKING:
|
|
9
|
+
from sqlframe.base.session import CONN
|
|
10
|
+
|
|
11
|
+
ENGINE_TO_PREFIX = {
|
|
12
|
+
"bigquery": "BigQuery",
|
|
13
|
+
"duckdb": "DuckDB",
|
|
14
|
+
"postgres": "Postgres",
|
|
15
|
+
"redshift": "Redshift",
|
|
16
|
+
"snowflake": "Snowflake",
|
|
17
|
+
"spark": "Spark",
|
|
18
|
+
"standalone": "Standalone",
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
NAME_TO_FILE_OVERRIDE = {
|
|
22
|
+
"DataFrameNaFunctions": "dataframe",
|
|
23
|
+
"DataFrameStatFunctions": "dataframe",
|
|
24
|
+
"DataFrameReader": "readwriter",
|
|
25
|
+
"DataFrameWriter": "readwriter",
|
|
26
|
+
"GroupedData": "group",
|
|
27
|
+
"SparkSession": "session",
|
|
28
|
+
"WindowSpec": "window",
|
|
29
|
+
"UDFRegistration": "udf",
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
ACTIVATE_CONFIG = {}
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def activate(
|
|
36
|
+
engine: t.Optional[str] = None,
|
|
37
|
+
conn: t.Optional[CONN] = None,
|
|
38
|
+
config: t.Optional[t.Dict[str, t.Any]] = None,
|
|
39
|
+
) -> None:
|
|
40
|
+
import sqlframe
|
|
41
|
+
from sqlframe import testing
|
|
42
|
+
|
|
43
|
+
pyspark_mock = MagicMock()
|
|
44
|
+
pyspark_mock.__file__ = "pyspark"
|
|
45
|
+
sys.modules["pyspark"] = pyspark_mock
|
|
46
|
+
pyspark_mock.testing = testing
|
|
47
|
+
sys.modules["pyspark.testing"] = testing
|
|
48
|
+
if conn:
|
|
49
|
+
ACTIVATE_CONFIG["sqlframe.conn"] = conn
|
|
50
|
+
for key, value in (config or {}).items():
|
|
51
|
+
ACTIVATE_CONFIG[key] = value
|
|
52
|
+
if not engine:
|
|
53
|
+
return
|
|
54
|
+
engine = engine.lower()
|
|
55
|
+
if engine not in ENGINE_TO_PREFIX:
|
|
56
|
+
raise ValueError(
|
|
57
|
+
f"Unsupported engine {engine}. Supported engines are {', '.join(ENGINE_TO_PREFIX)}"
|
|
58
|
+
)
|
|
59
|
+
prefix = ENGINE_TO_PREFIX[engine]
|
|
60
|
+
engine_module = importlib.import_module(f"sqlframe.{engine}")
|
|
61
|
+
|
|
62
|
+
sys.modules["pyspark.sql"] = engine_module
|
|
63
|
+
pyspark_mock.sql = engine_module
|
|
64
|
+
types = engine_module.__dict__.copy()
|
|
65
|
+
resolved_files = set()
|
|
66
|
+
for name, obj in types.items():
|
|
67
|
+
if name.startswith(prefix) or name in [
|
|
68
|
+
"Column",
|
|
69
|
+
"Window",
|
|
70
|
+
"WindowSpec",
|
|
71
|
+
"functions",
|
|
72
|
+
"types",
|
|
73
|
+
]:
|
|
74
|
+
name_without_prefix = name.replace(prefix, "")
|
|
75
|
+
if name_without_prefix == "Session":
|
|
76
|
+
name_without_prefix = "SparkSession"
|
|
77
|
+
setattr(engine_module, name_without_prefix, obj)
|
|
78
|
+
file = NAME_TO_FILE_OVERRIDE.get(name_without_prefix, name_without_prefix).lower()
|
|
79
|
+
engine_file = importlib.import_module(f"sqlframe.{engine}.{file}")
|
|
80
|
+
if engine_file not in resolved_files:
|
|
81
|
+
sys.modules[f"pyspark.sql.{file}"] = engine_file
|
|
82
|
+
resolved_files.add(engine_file)
|
|
83
|
+
setattr(engine_file, name_without_prefix, obj)
|
sqlframe/_version.py
CHANGED
sqlframe/base/column.py
CHANGED
|
@@ -339,7 +339,9 @@ class Column:
|
|
|
339
339
|
return Column(new_expression)
|
|
340
340
|
|
|
341
341
|
def cast(
|
|
342
|
-
self,
|
|
342
|
+
self,
|
|
343
|
+
dataType: t.Union[str, DataType, exp.DataType, exp.DataType.Type],
|
|
344
|
+
dialect: t.Optional[t.Union[str, Dialect]] = None,
|
|
343
345
|
) -> Column:
|
|
344
346
|
from sqlframe.base.session import _BaseSession
|
|
345
347
|
|
sqlframe/base/dataframe.py
CHANGED
|
@@ -42,6 +42,7 @@ else:
|
|
|
42
42
|
|
|
43
43
|
if t.TYPE_CHECKING:
|
|
44
44
|
import pandas as pd
|
|
45
|
+
from pyarrow import RecordBatchReader
|
|
45
46
|
from pyarrow import Table as ArrowTable
|
|
46
47
|
from sqlglot.dialects.dialect import DialectType
|
|
47
48
|
|
|
@@ -1815,5 +1816,14 @@ class _BaseDataFrame(t.Generic[SESSION, WRITER, NA, STAT, GROUP_DATA]):
|
|
|
1815
1816
|
|
|
1816
1817
|
return self.select(covar_samp(col_func(col1), col_func(col2))).collect()[0][0]
|
|
1817
1818
|
|
|
1818
|
-
|
|
1819
|
+
@t.overload
|
|
1820
|
+
def toArrow(self) -> ArrowTable: ...
|
|
1821
|
+
|
|
1822
|
+
@t.overload
|
|
1823
|
+
def toArrow(self, batch_size: int) -> RecordBatchReader: ...
|
|
1824
|
+
|
|
1825
|
+
def toArrow(self, batch_size: t.Optional[int] = None) -> t.Union[ArrowTable, RecordBatchReader]:
|
|
1826
|
+
"""
|
|
1827
|
+
`batch_size` and `RecordBatchReader` are not part of the PySpark API
|
|
1828
|
+
"""
|
|
1819
1829
|
raise NotImplementedError("Arrow conversion is not supported by this engine")
|
|
@@ -1593,7 +1593,7 @@ def try_to_timestamp_pgtemp(col: ColumnOrName, format: t.Optional[ColumnOrName]
|
|
|
1593
1593
|
def typeof_pg_typeof(col: ColumnOrName) -> Column:
|
|
1594
1594
|
return (
|
|
1595
1595
|
Column.invoke_anonymous_function(col, "pg_typeof")
|
|
1596
|
-
.cast("regtype", dialect="postgres")
|
|
1596
|
+
.cast(expression.DataType.build("regtype", dialect="postgres"))
|
|
1597
1597
|
.cast("text")
|
|
1598
1598
|
)
|
|
1599
1599
|
|
|
@@ -1603,6 +1603,29 @@ def typeof_from_variant(col: ColumnOrName) -> Column:
|
|
|
1603
1603
|
return Column.invoke_anonymous_function(col, "TYPEOF")
|
|
1604
1604
|
|
|
1605
1605
|
|
|
1606
|
+
def regexp_replace_global_option(
|
|
1607
|
+
str: ColumnOrName, pattern: str, replacement: str, position: t.Optional[int] = None
|
|
1608
|
+
) -> Column:
|
|
1609
|
+
lit = get_func_from_session("lit")
|
|
1610
|
+
|
|
1611
|
+
if position is not None:
|
|
1612
|
+
return Column.invoke_expression_over_column(
|
|
1613
|
+
str,
|
|
1614
|
+
expression.RegexpReplace,
|
|
1615
|
+
expression=lit(pattern),
|
|
1616
|
+
replacement=lit(replacement),
|
|
1617
|
+
position=lit(position),
|
|
1618
|
+
modifiers=lit("g"),
|
|
1619
|
+
)
|
|
1620
|
+
return Column.invoke_expression_over_column(
|
|
1621
|
+
str,
|
|
1622
|
+
expression.RegexpReplace,
|
|
1623
|
+
expression=lit(pattern),
|
|
1624
|
+
replacement=lit(replacement),
|
|
1625
|
+
modifiers=lit("g"),
|
|
1626
|
+
)
|
|
1627
|
+
|
|
1628
|
+
|
|
1606
1629
|
def _is_string_using_typeof_varchar(col: ColumnOrName) -> Column:
|
|
1607
1630
|
typeof = get_func_from_session("typeof")
|
|
1608
1631
|
lit = get_func_from_session("lit")
|
sqlframe/base/session.py
CHANGED
|
@@ -605,6 +605,10 @@ class _BaseSession(t.Generic[CATALOG, READER, WRITER, DF, CONN, UDF_REGISTRATION
|
|
|
605
605
|
return _BaseSession(**self._session_kwargs)
|
|
606
606
|
|
|
607
607
|
def getOrCreate(self) -> _BaseSession:
|
|
608
|
+
from sqlframe import ACTIVATE_CONFIG
|
|
609
|
+
|
|
610
|
+
for k, v in ACTIVATE_CONFIG.items():
|
|
611
|
+
self._set_config(k, v)
|
|
608
612
|
self._set_session_properties()
|
|
609
613
|
return self.session
|
|
610
614
|
|
sqlframe/bigquery/__init__.py
CHANGED
|
@@ -1,23 +1,32 @@
|
|
|
1
1
|
from sqlframe.bigquery.catalog import BigQueryCatalog
|
|
2
2
|
from sqlframe.bigquery.column import Column
|
|
3
|
-
from sqlframe.bigquery.dataframe import
|
|
3
|
+
from sqlframe.bigquery.dataframe import (
|
|
4
|
+
BigQueryDataFrame,
|
|
5
|
+
BigQueryDataFrameNaFunctions,
|
|
6
|
+
BigQueryDataFrameStatFunctions,
|
|
7
|
+
)
|
|
4
8
|
from sqlframe.bigquery.group import BigQueryGroupedData
|
|
5
9
|
from sqlframe.bigquery.readwriter import (
|
|
6
10
|
BigQueryDataFrameReader,
|
|
7
11
|
BigQueryDataFrameWriter,
|
|
8
12
|
)
|
|
9
13
|
from sqlframe.bigquery.session import BigQuerySession
|
|
14
|
+
from sqlframe.bigquery.types import Row
|
|
15
|
+
from sqlframe.bigquery.udf import BigQueryUDFRegistration
|
|
10
16
|
from sqlframe.bigquery.window import Window, WindowSpec
|
|
11
17
|
|
|
12
18
|
__all__ = [
|
|
13
19
|
"BigQueryCatalog",
|
|
14
|
-
"Column",
|
|
15
20
|
"BigQueryDataFrame",
|
|
16
21
|
"BigQueryDataFrameNaFunctions",
|
|
17
22
|
"BigQueryGroupedData",
|
|
18
23
|
"BigQueryDataFrameReader",
|
|
19
24
|
"BigQueryDataFrameWriter",
|
|
20
25
|
"BigQuerySession",
|
|
26
|
+
"BigQueryDataFrameStatFunctions",
|
|
27
|
+
"BigQueryUDFRegistration",
|
|
28
|
+
"Column",
|
|
29
|
+
"Row",
|
|
21
30
|
"Window",
|
|
22
31
|
"WindowSpec",
|
|
23
32
|
]
|
sqlframe/bigquery/session.py
CHANGED
sqlframe/duckdb/__init__.py
CHANGED
|
@@ -1,20 +1,29 @@
|
|
|
1
1
|
from sqlframe.duckdb.catalog import DuckDBCatalog
|
|
2
|
-
from sqlframe.duckdb.column import
|
|
3
|
-
from sqlframe.duckdb.dataframe import
|
|
2
|
+
from sqlframe.duckdb.column import Column
|
|
3
|
+
from sqlframe.duckdb.dataframe import (
|
|
4
|
+
DuckDBDataFrame,
|
|
5
|
+
DuckDBDataFrameNaFunctions,
|
|
6
|
+
DuckDBDataFrameStatFunctions,
|
|
7
|
+
)
|
|
4
8
|
from sqlframe.duckdb.group import DuckDBGroupedData
|
|
5
9
|
from sqlframe.duckdb.readwriter import DuckDBDataFrameReader, DuckDBDataFrameWriter
|
|
6
10
|
from sqlframe.duckdb.session import DuckDBSession
|
|
11
|
+
from sqlframe.duckdb.types import Row
|
|
12
|
+
from sqlframe.duckdb.udf import DuckDBUDFRegistration
|
|
7
13
|
from sqlframe.duckdb.window import Window, WindowSpec
|
|
8
14
|
|
|
9
15
|
__all__ = [
|
|
16
|
+
"Column",
|
|
10
17
|
"DuckDBCatalog",
|
|
11
|
-
"DuckDBColumn",
|
|
12
18
|
"DuckDBDataFrame",
|
|
13
19
|
"DuckDBDataFrameNaFunctions",
|
|
14
20
|
"DuckDBGroupedData",
|
|
15
21
|
"DuckDBDataFrameReader",
|
|
16
22
|
"DuckDBDataFrameWriter",
|
|
17
23
|
"DuckDBSession",
|
|
24
|
+
"DuckDBDataFrameStatFunctions",
|
|
25
|
+
"DuckDBUDFRegistration",
|
|
26
|
+
"Row",
|
|
18
27
|
"Window",
|
|
19
28
|
"WindowSpec",
|
|
20
29
|
]
|
sqlframe/duckdb/column.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
from sqlframe.base.column import Column
|
|
1
|
+
from sqlframe.base.column import Column
|
sqlframe/duckdb/dataframe.py
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import logging
|
|
4
|
-
import sys
|
|
5
4
|
import typing as t
|
|
6
5
|
|
|
7
6
|
from sqlframe.base.dataframe import (
|
|
@@ -19,8 +18,7 @@ if t.TYPE_CHECKING:
|
|
|
19
18
|
from sqlframe.duckdb.session import DuckDBSession # noqa
|
|
20
19
|
from sqlframe.duckdb.readwriter import DuckDBDataFrameWriter # noqa
|
|
21
20
|
from sqlframe.duckdb.group import DuckDBGroupedData # noqa
|
|
22
|
-
from pyarrow import Table as ArrowTable
|
|
23
|
-
|
|
21
|
+
from pyarrow import Table as ArrowTable, RecordBatchReader
|
|
24
22
|
|
|
25
23
|
logger = logging.getLogger(__name__)
|
|
26
24
|
|
|
@@ -48,6 +46,14 @@ class DuckDBDataFrame(
|
|
|
48
46
|
_stat = DuckDBDataFrameStatFunctions
|
|
49
47
|
_group_data = DuckDBGroupedData
|
|
50
48
|
|
|
51
|
-
|
|
49
|
+
@t.overload
|
|
50
|
+
def toArrow(self) -> ArrowTable: ...
|
|
51
|
+
|
|
52
|
+
@t.overload
|
|
53
|
+
def toArrow(self, batch_size: int) -> RecordBatchReader: ...
|
|
54
|
+
|
|
55
|
+
def toArrow(self, batch_size: t.Optional[int] = None) -> t.Union[ArrowTable, RecordBatchReader]:
|
|
52
56
|
self._collect(skip_rows=True)
|
|
53
|
-
|
|
57
|
+
if not batch_size:
|
|
58
|
+
return self.session._last_result.arrow()
|
|
59
|
+
return self.session._last_result.fetch_record_batch(batch_size)
|
sqlframe/duckdb/functions.py
CHANGED
sqlframe/duckdb/functions.pyi
CHANGED
|
@@ -28,6 +28,7 @@ from sqlframe.base.function_alternatives import ( # noqa
|
|
|
28
28
|
sequence_from_generate_series as sequence,
|
|
29
29
|
try_element_at_zero_based as try_element_at,
|
|
30
30
|
to_unix_timestamp_include_default_format as to_unix_timestamp,
|
|
31
|
+
regexp_replace_global_option as regexp_replace,
|
|
31
32
|
)
|
|
32
33
|
from sqlframe.base.functions import (
|
|
33
34
|
abs as abs,
|
|
@@ -156,7 +157,6 @@ from sqlframe.base.functions import (
|
|
|
156
157
|
rank as rank,
|
|
157
158
|
regexp_extract as regexp_extract,
|
|
158
159
|
regexp_like as regexp_like,
|
|
159
|
-
regexp_replace as regexp_replace,
|
|
160
160
|
repeat as repeat,
|
|
161
161
|
reverse as reverse,
|
|
162
162
|
right as right,
|
sqlframe/duckdb/session.py
CHANGED
sqlframe/postgres/__init__.py
CHANGED
|
@@ -1,23 +1,32 @@
|
|
|
1
1
|
from sqlframe.postgres.catalog import PostgresCatalog
|
|
2
2
|
from sqlframe.postgres.column import Column
|
|
3
|
-
from sqlframe.postgres.dataframe import
|
|
3
|
+
from sqlframe.postgres.dataframe import (
|
|
4
|
+
PostgresDataFrame,
|
|
5
|
+
PostgresDataFrameNaFunctions,
|
|
6
|
+
PostgresDataFrameStatFunctions,
|
|
7
|
+
)
|
|
4
8
|
from sqlframe.postgres.group import PostgresGroupedData
|
|
5
9
|
from sqlframe.postgres.readwriter import (
|
|
6
10
|
PostgresDataFrameReader,
|
|
7
11
|
PostgresDataFrameWriter,
|
|
8
12
|
)
|
|
9
13
|
from sqlframe.postgres.session import PostgresSession
|
|
14
|
+
from sqlframe.postgres.types import Row
|
|
15
|
+
from sqlframe.postgres.udf import PostgresUDFRegistration
|
|
10
16
|
from sqlframe.postgres.window import Window, WindowSpec
|
|
11
17
|
|
|
12
18
|
__all__ = [
|
|
13
|
-
"PostgresCatalog",
|
|
14
19
|
"Column",
|
|
20
|
+
"PostgresCatalog",
|
|
15
21
|
"PostgresDataFrame",
|
|
16
22
|
"PostgresDataFrameNaFunctions",
|
|
17
23
|
"PostgresGroupedData",
|
|
18
24
|
"PostgresDataFrameReader",
|
|
19
25
|
"PostgresDataFrameWriter",
|
|
20
26
|
"PostgresSession",
|
|
27
|
+
"PostgresDataFrameStatFunctions",
|
|
28
|
+
"PostgresUDFRegistration",
|
|
29
|
+
"Row",
|
|
21
30
|
"Window",
|
|
22
31
|
"WindowSpec",
|
|
23
32
|
]
|
sqlframe/postgres/functions.py
CHANGED
sqlframe/postgres/functions.pyi
CHANGED
|
@@ -47,6 +47,7 @@ from sqlframe.base.function_alternatives import ( # noqa
|
|
|
47
47
|
right_cast_len as right,
|
|
48
48
|
position_cast_start as position,
|
|
49
49
|
try_element_at_zero_based as try_element_at,
|
|
50
|
+
regexp_replace_global_option as regexp_replace,
|
|
50
51
|
)
|
|
51
52
|
from sqlframe.base.functions import (
|
|
52
53
|
abs as abs,
|
|
@@ -148,7 +149,6 @@ from sqlframe.base.functions import (
|
|
|
148
149
|
radians as radians,
|
|
149
150
|
rank as rank,
|
|
150
151
|
regexp_like as regexp_like,
|
|
151
|
-
regexp_replace as regexp_replace,
|
|
152
152
|
repeat as repeat,
|
|
153
153
|
reverse as reverse,
|
|
154
154
|
rlike as rlike,
|
sqlframe/postgres/session.py
CHANGED
sqlframe/redshift/__init__.py
CHANGED
|
@@ -1,23 +1,32 @@
|
|
|
1
1
|
from sqlframe.redshift.catalog import RedshiftCatalog
|
|
2
2
|
from sqlframe.redshift.column import Column
|
|
3
|
-
from sqlframe.redshift.dataframe import
|
|
3
|
+
from sqlframe.redshift.dataframe import (
|
|
4
|
+
RedshiftDataFrame,
|
|
5
|
+
RedshiftDataFrameNaFunctions,
|
|
6
|
+
RedshiftDataFrameStatFunctions,
|
|
7
|
+
)
|
|
4
8
|
from sqlframe.redshift.group import RedshiftGroupedData
|
|
5
9
|
from sqlframe.redshift.readwriter import (
|
|
6
10
|
RedshiftDataFrameReader,
|
|
7
11
|
RedshiftDataFrameWriter,
|
|
8
12
|
)
|
|
9
13
|
from sqlframe.redshift.session import RedshiftSession
|
|
14
|
+
from sqlframe.redshift.types import Row
|
|
15
|
+
from sqlframe.redshift.udf import RedshiftUDFRegistration
|
|
10
16
|
from sqlframe.redshift.window import Window, WindowSpec
|
|
11
17
|
|
|
12
18
|
__all__ = [
|
|
13
|
-
"RedshiftCatalog",
|
|
14
19
|
"Column",
|
|
20
|
+
"RedshiftCatalog",
|
|
15
21
|
"RedshiftDataFrame",
|
|
16
22
|
"RedshiftDataFrameNaFunctions",
|
|
17
23
|
"RedshiftGroupedData",
|
|
18
24
|
"RedshiftDataFrameReader",
|
|
19
25
|
"RedshiftDataFrameWriter",
|
|
20
26
|
"RedshiftSession",
|
|
27
|
+
"RedshiftDataFrameStatFunctions",
|
|
28
|
+
"RedshiftUDFRegistration",
|
|
29
|
+
"Row",
|
|
21
30
|
"Window",
|
|
22
31
|
"WindowSpec",
|
|
23
32
|
]
|
sqlframe/redshift/session.py
CHANGED
sqlframe/snowflake/__init__.py
CHANGED
|
@@ -3,6 +3,7 @@ from sqlframe.snowflake.column import Column
|
|
|
3
3
|
from sqlframe.snowflake.dataframe import (
|
|
4
4
|
SnowflakeDataFrame,
|
|
5
5
|
SnowflakeDataFrameNaFunctions,
|
|
6
|
+
SnowflakeDataFrameStatFunctions,
|
|
6
7
|
)
|
|
7
8
|
from sqlframe.snowflake.group import SnowflakeGroupedData
|
|
8
9
|
from sqlframe.snowflake.readwriter import (
|
|
@@ -10,17 +11,22 @@ from sqlframe.snowflake.readwriter import (
|
|
|
10
11
|
SnowflakeDataFrameWriter,
|
|
11
12
|
)
|
|
12
13
|
from sqlframe.snowflake.session import SnowflakeSession
|
|
14
|
+
from sqlframe.snowflake.types import Row
|
|
15
|
+
from sqlframe.snowflake.udf import SnowflakeUDFRegistration
|
|
13
16
|
from sqlframe.snowflake.window import Window, WindowSpec
|
|
14
17
|
|
|
15
18
|
__all__ = [
|
|
16
|
-
"SnowflakeCatalog",
|
|
17
19
|
"Column",
|
|
20
|
+
"Row",
|
|
21
|
+
"SnowflakeCatalog",
|
|
18
22
|
"SnowflakeDataFrame",
|
|
19
23
|
"SnowflakeDataFrameNaFunctions",
|
|
20
24
|
"SnowflakeGroupedData",
|
|
21
25
|
"SnowflakeDataFrameReader",
|
|
22
26
|
"SnowflakeDataFrameWriter",
|
|
23
27
|
"SnowflakeSession",
|
|
28
|
+
"SnowflakeDataFrameStatFunctions",
|
|
29
|
+
"SnowflakeUDFRegistration",
|
|
24
30
|
"Window",
|
|
25
31
|
"WindowSpec",
|
|
26
32
|
]
|
sqlframe/snowflake/session.py
CHANGED
sqlframe/spark/__init__.py
CHANGED
|
@@ -1,23 +1,32 @@
|
|
|
1
1
|
from sqlframe.spark.catalog import SparkCatalog
|
|
2
2
|
from sqlframe.spark.column import Column
|
|
3
|
-
from sqlframe.spark.dataframe import
|
|
3
|
+
from sqlframe.spark.dataframe import (
|
|
4
|
+
SparkDataFrame,
|
|
5
|
+
SparkDataFrameNaFunctions,
|
|
6
|
+
SparkDataFrameStatFunctions,
|
|
7
|
+
)
|
|
4
8
|
from sqlframe.spark.group import SparkGroupedData
|
|
5
9
|
from sqlframe.spark.readwriter import (
|
|
6
10
|
SparkDataFrameReader,
|
|
7
11
|
SparkDataFrameWriter,
|
|
8
12
|
)
|
|
9
13
|
from sqlframe.spark.session import SparkSession
|
|
14
|
+
from sqlframe.spark.types import Row
|
|
15
|
+
from sqlframe.spark.udf import SparkUDFRegistration
|
|
10
16
|
from sqlframe.spark.window import Window, WindowSpec
|
|
11
17
|
|
|
12
18
|
__all__ = [
|
|
13
|
-
"SparkCatalog",
|
|
14
19
|
"Column",
|
|
20
|
+
"Row",
|
|
21
|
+
"SparkCatalog",
|
|
15
22
|
"SparkDataFrame",
|
|
16
23
|
"SparkDataFrameNaFunctions",
|
|
17
24
|
"SparkGroupedData",
|
|
18
25
|
"SparkDataFrameReader",
|
|
19
26
|
"SparkDataFrameWriter",
|
|
20
27
|
"SparkSession",
|
|
28
|
+
"SparkDataFrameStatFunctions",
|
|
29
|
+
"SparkUDFRegistration",
|
|
21
30
|
"Window",
|
|
22
31
|
"WindowSpec",
|
|
23
32
|
]
|
sqlframe/spark/session.py
CHANGED
sqlframe/standalone/__init__.py
CHANGED
|
@@ -3,6 +3,7 @@ from sqlframe.standalone.column import Column
|
|
|
3
3
|
from sqlframe.standalone.dataframe import (
|
|
4
4
|
StandaloneDataFrame,
|
|
5
5
|
StandaloneDataFrameNaFunctions,
|
|
6
|
+
StandaloneDataFrameStatFunctions,
|
|
6
7
|
)
|
|
7
8
|
from sqlframe.standalone.group import StandaloneGroupedData
|
|
8
9
|
from sqlframe.standalone.readwriter import (
|
|
@@ -10,17 +11,22 @@ from sqlframe.standalone.readwriter import (
|
|
|
10
11
|
StandaloneDataFrameWriter,
|
|
11
12
|
)
|
|
12
13
|
from sqlframe.standalone.session import StandaloneSession
|
|
14
|
+
from sqlframe.standalone.types import Row
|
|
15
|
+
from sqlframe.standalone.udf import StandaloneUDFRegistration
|
|
13
16
|
from sqlframe.standalone.window import Window, WindowSpec
|
|
14
17
|
|
|
15
18
|
__all__ = [
|
|
16
|
-
"StandaloneCatalog",
|
|
17
19
|
"Column",
|
|
20
|
+
"Row",
|
|
21
|
+
"StandaloneCatalog",
|
|
18
22
|
"StandaloneDataFrame",
|
|
19
23
|
"StandaloneDataFrameNaFunctions",
|
|
20
24
|
"StandaloneGroupedData",
|
|
21
25
|
"StandaloneDataFrameReader",
|
|
22
26
|
"StandaloneDataFrameWriter",
|
|
23
27
|
"StandaloneSession",
|
|
28
|
+
"StandaloneDataFrameStatFunctions",
|
|
29
|
+
"StandaloneUDFRegistration",
|
|
24
30
|
"Window",
|
|
25
31
|
"WindowSpec",
|
|
26
32
|
]
|
sqlframe/standalone/session.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: sqlframe
|
|
3
|
-
Version:
|
|
3
|
+
Version: 3.0.0
|
|
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,13 +18,14 @@ 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.17,>=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
27
|
Requires-Dist: duckdb (<1.1,>=0.9) ; extra == 'dev'
|
|
28
|
+
Requires-Dist: findspark (<3,>=2) ; extra == 'dev'
|
|
28
29
|
Requires-Dist: mypy (<1.12,>=1.10.0) ; extra == 'dev'
|
|
29
30
|
Requires-Dist: openai (<1.43,>=1.30) ; extra == 'dev'
|
|
30
31
|
Requires-Dist: pandas-stubs (<3,>=2) ; extra == 'dev'
|
|
@@ -81,10 +82,10 @@ SQLFrame also has a "Standalone" session that be used to generate SQL without an
|
|
|
81
82
|
|
|
82
83
|
SQLFrame is great for:
|
|
83
84
|
|
|
84
|
-
* Users who want
|
|
85
|
+
* Users who want a DataFrame API that leverages the full power of their engine to do the processing
|
|
86
|
+
* Users who want to run PySpark code quickly locally without the overhead of starting a Spark session
|
|
85
87
|
* Users who want a SQL representation of their DataFrame code for debugging or sharing with others
|
|
86
|
-
|
|
87
|
-
* Users who want a DataFrame API that leverages the full power of their engine to do the processing
|
|
88
|
+
* Users who want to run PySpark DataFrame code without the complexity of using Spark for processing
|
|
88
89
|
|
|
89
90
|
## Installation
|
|
90
91
|
|
|
@@ -108,44 +109,72 @@ See specific engine documentation for additional setup instructions.
|
|
|
108
109
|
## Configuration
|
|
109
110
|
|
|
110
111
|
SQLFrame generates consistently accurate yet complex SQL for engine execution.
|
|
111
|
-
However, when using df.sql(), it produces more human-readable SQL.
|
|
112
|
+
However, when using df.sql(optimize=True), it produces more human-readable SQL.
|
|
112
113
|
For details on how to configure this output and leverage OpenAI to enhance the SQL, see [Generated SQL Configuration](https://sqlframe.readthedocs.io/en/stable/configuration/#generated-sql).
|
|
113
114
|
|
|
114
115
|
SQLFrame by default uses the Spark dialect for input and output.
|
|
115
116
|
This can be changed to make SQLFrame feel more like a native DataFrame API for the engine you are using.
|
|
116
117
|
See [Input and Output Dialect Configuration](https://sqlframe.readthedocs.io/en/stable/configuration/#input-and-output-dialect).
|
|
117
118
|
|
|
119
|
+
## Activating SQLFrame
|
|
120
|
+
|
|
121
|
+
SQLFrame can either replace pyspark imports or be used alongside them.
|
|
122
|
+
To replace pyspark imports, use the [activate function](https://sqlframe.readthedocs.io/en/stable/configuration/#activating-sqlframe) to set the engine to use.
|
|
123
|
+
|
|
124
|
+
```python
|
|
125
|
+
from sqlframe import activate
|
|
126
|
+
|
|
127
|
+
# Activate SQLFrame to run directly on DuckDB
|
|
128
|
+
activate(engine="duckdb")
|
|
129
|
+
|
|
130
|
+
from pyspark.sql import SparkSession
|
|
131
|
+
session = SparkSession.builder.getOrCreate()
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
SQLFrame can also be directly imported which both maintains pyspark imports but also allows for a more engine-native DataFrame API:
|
|
135
|
+
|
|
136
|
+
```python
|
|
137
|
+
from sqlframe.duckdb import DuckDBSession
|
|
138
|
+
|
|
139
|
+
session = DuckDBSession.builder.getOrCreate()
|
|
140
|
+
```
|
|
141
|
+
|
|
118
142
|
## Example Usage
|
|
119
143
|
|
|
120
144
|
```python
|
|
121
|
-
from sqlframe
|
|
122
|
-
|
|
123
|
-
|
|
145
|
+
from sqlframe import activate
|
|
146
|
+
|
|
147
|
+
# Activate SQLFrame to run directly on BigQuery
|
|
148
|
+
activate(engine="bigquery")
|
|
149
|
+
|
|
150
|
+
from pyspark.sql import SparkSession
|
|
151
|
+
from pyspark.sql import functions as F
|
|
152
|
+
from pyspark.sql import Window
|
|
124
153
|
|
|
125
|
-
session =
|
|
154
|
+
session = SparkSession.builder.getOrCreate()
|
|
126
155
|
table_path = '"bigquery-public-data".samples.natality'
|
|
127
156
|
# Top 5 years with the greatest year-over-year % change in new families with single child
|
|
128
157
|
df = (
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
158
|
+
session.table(table_path)
|
|
159
|
+
.where(F.col("ever_born") == 1)
|
|
160
|
+
.groupBy("year")
|
|
161
|
+
.agg(F.count("*").alias("num_single_child_families"))
|
|
162
|
+
.withColumn(
|
|
163
|
+
"last_year_num_single_child_families",
|
|
164
|
+
F.lag(F.col("num_single_child_families"), 1).over(Window.orderBy("year"))
|
|
165
|
+
)
|
|
166
|
+
.withColumn(
|
|
167
|
+
"percent_change",
|
|
168
|
+
(F.col("num_single_child_families") - F.col("last_year_num_single_child_families"))
|
|
169
|
+
/ F.col("last_year_num_single_child_families")
|
|
170
|
+
)
|
|
171
|
+
.orderBy(F.abs(F.col("percent_change")).desc())
|
|
172
|
+
.select(
|
|
173
|
+
F.col("year").alias("year"),
|
|
174
|
+
F.format_number("num_single_child_families", 0).alias("new families single child"),
|
|
175
|
+
F.format_number(F.col("percent_change") * 100, 2).alias("percent change"),
|
|
176
|
+
)
|
|
177
|
+
.limit(5)
|
|
149
178
|
)
|
|
150
179
|
```
|
|
151
180
|
```python
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
sqlframe/__init__.py,sha256=
|
|
2
|
-
sqlframe/_version.py,sha256=
|
|
1
|
+
sqlframe/__init__.py,sha256=vpa_uyTR93861-mffYN9cJbjAXhQIr6pmfDPlaZKF6M,2583
|
|
2
|
+
sqlframe/_version.py,sha256=E9sjrmgE4U1biRnH7SOU6xOu4ABa14HHotRIgXR086E,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
|
-
sqlframe/base/column.py,sha256=
|
|
7
|
-
sqlframe/base/dataframe.py,sha256=
|
|
6
|
+
sqlframe/base/column.py,sha256=C2xj6OHMsJbEgjbI-m5HuIvqHYt2DbbUtCjssKpplNk,17748
|
|
7
|
+
sqlframe/base/dataframe.py,sha256=wIYKaV9xzILPVmAcujvRmbH-6dbKPx6hVNHNWCEuayM,71479
|
|
8
8
|
sqlframe/base/decorators.py,sha256=Jy4bf8MhZ-AJ6CWTj59bBJRqamtLbPC0USUMFrY6g0w,449
|
|
9
9
|
sqlframe/base/exceptions.py,sha256=9Uwvqn2eAkDpqm4BrRgbL61qM-GMCbJEMAW8otxO46s,370
|
|
10
|
-
sqlframe/base/function_alternatives.py,sha256=
|
|
10
|
+
sqlframe/base/function_alternatives.py,sha256=IxNBqplehkAEkpzA625Dif-9Xyi4Hrho81A9U262rV0,50714
|
|
11
11
|
sqlframe/base/functions.py,sha256=2dDfPepAuQvLcxwaZbj9qJeEeiqOaYJDI3vPoZXoM1Q,189959
|
|
12
12
|
sqlframe/base/group.py,sha256=TES9CleVmH3x-0X-tqmuUKfCKSWjH5vg1aU3R6dDmFc,4059
|
|
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=DgkzSKFc3LdzXiqB9ofsh47Ygivq2-Or6J2XbDLzxVs,25162
|
|
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
|
|
@@ -23,7 +23,7 @@ sqlframe/base/mixins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hS
|
|
|
23
23
|
sqlframe/base/mixins/catalog_mixins.py,sha256=9tn0mK8oPoqIIjNItystD5tdBMdK9YpkxTG7G9KQl8k,18619
|
|
24
24
|
sqlframe/base/mixins/dataframe_mixins.py,sha256=3MMQu2hdHG_qtDQ6jDHo0Iy5KtLj4lHePfovCVxTqbo,1411
|
|
25
25
|
sqlframe/base/mixins/readwriter_mixins.py,sha256=QnxGVL8ftZfYlBNG0Bl24N_bnA2YioSxUsTSgKIbuvQ,4723
|
|
26
|
-
sqlframe/bigquery/__init__.py,sha256=
|
|
26
|
+
sqlframe/bigquery/__init__.py,sha256=kbaomhYAANPdxeDQhajv8IHfMg_ENKivtYK-rPwaV08,939
|
|
27
27
|
sqlframe/bigquery/catalog.py,sha256=8d36IzT5GPWd1FdxJ9vEljOdbIDepHnFOBjwP0bX6FE,11625
|
|
28
28
|
sqlframe/bigquery/column.py,sha256=E1tUa62Y5HajkhgFuebU9zohrGyieudcHzTT8gfalio,40
|
|
29
29
|
sqlframe/bigquery/dataframe.py,sha256=Y2uy4FEYw0KxIHgnaA9uMwdIzxJzTlD_NSzIe7P7kxA,2405
|
|
@@ -31,46 +31,46 @@ sqlframe/bigquery/functions.py,sha256=CxXiBzSLRf9h-9lAM8xSz1CFcVk2tVXU1eFPJ4d_L0
|
|
|
31
31
|
sqlframe/bigquery/functions.pyi,sha256=BCYqHpZzv4KWVtTuiC9wCSzXdxeHsz9gwkEvKzwHnoY,13583
|
|
32
32
|
sqlframe/bigquery/group.py,sha256=UVBNBRTo8OqS-_cS5YwvTeJYgYxeG-d6R3kfyHmlFqw,391
|
|
33
33
|
sqlframe/bigquery/readwriter.py,sha256=WAD3ZMwkkjOpvPPoZXfaLLNM6tRTeUvdEj-hQZAzXeo,870
|
|
34
|
-
sqlframe/bigquery/session.py,sha256
|
|
34
|
+
sqlframe/bigquery/session.py,sha256=uSiEWWiDEryq3gIJJUmsu1DIalRGomNiymVulxt439c,2744
|
|
35
35
|
sqlframe/bigquery/types.py,sha256=KwNyuXIo-2xVVd4bZED3YrQOobKCtemlxGrJL7DrTC8,34
|
|
36
36
|
sqlframe/bigquery/udf.py,sha256=ZZ1-P1zWZhQqmhBqwAxfNeKl31nDkkZgkuz7Dn28P_0,264
|
|
37
37
|
sqlframe/bigquery/window.py,sha256=6GKPzuxeSapJakBaKBeT9VpED1ACdjggDv9JRILDyV0,35
|
|
38
|
-
sqlframe/duckdb/__init__.py,sha256=
|
|
38
|
+
sqlframe/duckdb/__init__.py,sha256=KAw_uZEhFMwi3D9Wj6AgHAKqLNk-EAx2uDIYu56oL44,872
|
|
39
39
|
sqlframe/duckdb/catalog.py,sha256=YYYVmetLUaJOdObKw4AJ7L0P-msshkta4xHlcZQ9zEA,4795
|
|
40
|
-
sqlframe/duckdb/column.py,sha256=
|
|
41
|
-
sqlframe/duckdb/dataframe.py,sha256=
|
|
42
|
-
sqlframe/duckdb/functions.py,sha256=
|
|
43
|
-
sqlframe/duckdb/functions.pyi,sha256=
|
|
40
|
+
sqlframe/duckdb/column.py,sha256=E1tUa62Y5HajkhgFuebU9zohrGyieudcHzTT8gfalio,40
|
|
41
|
+
sqlframe/duckdb/dataframe.py,sha256=HZg_uMAz4RsubZJT4-MslUQS_0-InF0_P5Yq5HyJ3wE,1708
|
|
42
|
+
sqlframe/duckdb/functions.py,sha256=Ee8o6YFtRdEiq0jNLXxgu5lcbc7Tsg0-lK6oRyxdcjo,1920
|
|
43
|
+
sqlframe/duckdb/functions.pyi,sha256=Qn6j4zwwuBsh6q9341dR3Z5kpeRsgvM4u6Bb6FekKrI,5827
|
|
44
44
|
sqlframe/duckdb/group.py,sha256=IkhbW42Ng1U5YT3FkIdiB4zBqRkW4QyTb-1detY1e_4,383
|
|
45
45
|
sqlframe/duckdb/readwriter.py,sha256=0qZcARQoWYlx9P2m0uS2vuMj_tG_ka4NhHzg7qdaR3I,4597
|
|
46
|
-
sqlframe/duckdb/session.py,sha256=
|
|
46
|
+
sqlframe/duckdb/session.py,sha256=Pho9H74_0xNQPP_oBdFa4aflBAsrxvpXPMQGSKyq1-4,2322
|
|
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
|
|
50
|
-
sqlframe/postgres/__init__.py,sha256=
|
|
50
|
+
sqlframe/postgres/__init__.py,sha256=NN9WI0-GehvpPdJmTB2VSDVpA5PAtxa3ZkF4BRcTEy4,939
|
|
51
51
|
sqlframe/postgres/catalog.py,sha256=9XVXXDW04mY_KmeB52NsCny8n0evqdDCBxhGH1Xce6s,8956
|
|
52
52
|
sqlframe/postgres/column.py,sha256=E1tUa62Y5HajkhgFuebU9zohrGyieudcHzTT8gfalio,40
|
|
53
53
|
sqlframe/postgres/dataframe.py,sha256=f-w6UHxZtmeZ5oMbaqJaZ8FrYeOhzyveNlZOK57ke0k,1289
|
|
54
|
-
sqlframe/postgres/functions.py,sha256=
|
|
55
|
-
sqlframe/postgres/functions.pyi,sha256=
|
|
54
|
+
sqlframe/postgres/functions.py,sha256=iujyPmI6frOCD7pymgBby89DezPHm8dmt75sebhzRaw,2636
|
|
55
|
+
sqlframe/postgres/functions.pyi,sha256=9s7W5QPZXPKqxY6XpkxLCHmC5sp1PkJg1LywgpWTz-k,5550
|
|
56
56
|
sqlframe/postgres/group.py,sha256=KUXeSFKWTSH9yCRJAhW85OvjZaG6Zr4In9LR_ie3yGU,391
|
|
57
57
|
sqlframe/postgres/readwriter.py,sha256=L1e3yKXzFVNR_W5s1DHaWol7G8x7l4jcZ5sLGualyMk,870
|
|
58
|
-
sqlframe/postgres/session.py,sha256=
|
|
58
|
+
sqlframe/postgres/session.py,sha256=v030gVL6DEZb1utcqexupCC-8ouEumeLhvqRyvQfRew,2477
|
|
59
59
|
sqlframe/postgres/types.py,sha256=KwNyuXIo-2xVVd4bZED3YrQOobKCtemlxGrJL7DrTC8,34
|
|
60
60
|
sqlframe/postgres/udf.py,sha256=TylVxrmPzycAqnpTiueGvvetiMCfCX31QatgQMIgpME,264
|
|
61
61
|
sqlframe/postgres/window.py,sha256=6GKPzuxeSapJakBaKBeT9VpED1ACdjggDv9JRILDyV0,35
|
|
62
|
-
sqlframe/redshift/__init__.py,sha256=
|
|
62
|
+
sqlframe/redshift/__init__.py,sha256=F43uqhCJYQk5wK8Ydvmn5KGrvt__IYaDVS0DJ_-izhc,939
|
|
63
63
|
sqlframe/redshift/catalog.py,sha256=x-sfVwoOS_0MeLICCqu7YUiFRgBam7vV1sHfaAKZGjE,5410
|
|
64
64
|
sqlframe/redshift/column.py,sha256=E1tUa62Y5HajkhgFuebU9zohrGyieudcHzTT8gfalio,40
|
|
65
65
|
sqlframe/redshift/dataframe.py,sha256=aTC0DOPDFwWH1_b9T0Pif80cYSGudIp0D-cmkR7Ci_M,1104
|
|
66
66
|
sqlframe/redshift/functions.py,sha256=DR5kodYAcKatUqopwrEQtxryI4ZSqaH47_y3WLht4Wg,455
|
|
67
67
|
sqlframe/redshift/group.py,sha256=5MGZYJfHpzoRSQ0N_pn4KUk4Mk2gocQwU3K1-jAbvGg,391
|
|
68
68
|
sqlframe/redshift/readwriter.py,sha256=g3FYKSsJKqcSnElprzzz29ZctoXq9tRB0Mj9Bm1HycI,870
|
|
69
|
-
sqlframe/redshift/session.py,sha256=
|
|
69
|
+
sqlframe/redshift/session.py,sha256=FKzypkZjuwU4A2DMe9vJTVJYdXGyl63jV72bToz6c4o,1575
|
|
70
70
|
sqlframe/redshift/types.py,sha256=KwNyuXIo-2xVVd4bZED3YrQOobKCtemlxGrJL7DrTC8,34
|
|
71
71
|
sqlframe/redshift/udf.py,sha256=xOi7vtO56MyYprC3ys3FCSVJ5EVjEq2l_KqEVgKJrkw,264
|
|
72
72
|
sqlframe/redshift/window.py,sha256=6GKPzuxeSapJakBaKBeT9VpED1ACdjggDv9JRILDyV0,35
|
|
73
|
-
sqlframe/snowflake/__init__.py,sha256=
|
|
73
|
+
sqlframe/snowflake/__init__.py,sha256=msYAxOnPyjuBSTbpb5s9P5o0pr2N82UUGPxUtv0TNNw,966
|
|
74
74
|
sqlframe/snowflake/catalog.py,sha256=Tp_B9oMTInnqLTiZNsT0UNc-a-aKXu3zFThlCwLeKCA,6507
|
|
75
75
|
sqlframe/snowflake/column.py,sha256=E1tUa62Y5HajkhgFuebU9zohrGyieudcHzTT8gfalio,40
|
|
76
76
|
sqlframe/snowflake/dataframe.py,sha256=ANDZ5Dpxz-WTlTtmKNcv-nJlzTeTsAOK0X0gR2euPqQ,2144
|
|
@@ -78,11 +78,11 @@ sqlframe/snowflake/functions.py,sha256=iX67xU8Czy5k3HiNjNbN-x-via6yqGNaMPw1maV9H
|
|
|
78
78
|
sqlframe/snowflake/functions.pyi,sha256=wqUPXuZxjRY0rPY2BRAb7XXkWYP1DyuDzvlriRySdSw,6185
|
|
79
79
|
sqlframe/snowflake/group.py,sha256=pPP1l2RRo_LgkXrji8a87n2PKo-63ZRPT-WUtvVcBME,395
|
|
80
80
|
sqlframe/snowflake/readwriter.py,sha256=yhRc2HcMq6PwV3ghZWC-q-qaE7LE4aEjZEXCip4OOlQ,884
|
|
81
|
-
sqlframe/snowflake/session.py,sha256=
|
|
81
|
+
sqlframe/snowflake/session.py,sha256=fnFYrJ9JxoOf4ZKTrQcSKjwr6wNp6A85cMqKczOi3vA,3320
|
|
82
82
|
sqlframe/snowflake/types.py,sha256=KwNyuXIo-2xVVd4bZED3YrQOobKCtemlxGrJL7DrTC8,34
|
|
83
83
|
sqlframe/snowflake/udf.py,sha256=yzMmky-n5BXFbdldgfzLP8hCrVm0DgruSUCUUy1_3sk,268
|
|
84
84
|
sqlframe/snowflake/window.py,sha256=6GKPzuxeSapJakBaKBeT9VpED1ACdjggDv9JRILDyV0,35
|
|
85
|
-
sqlframe/spark/__init__.py,sha256=
|
|
85
|
+
sqlframe/spark/__init__.py,sha256=QV0eNmY5fL4ulLvAJVVVx2OYFfQXN2KYV3R5cij7HTg,858
|
|
86
86
|
sqlframe/spark/catalog.py,sha256=3T4aivgQmAhPTmlVk53jk3VvFBJlp1pKvWKNmTHz1W8,39741
|
|
87
87
|
sqlframe/spark/column.py,sha256=E1tUa62Y5HajkhgFuebU9zohrGyieudcHzTT8gfalio,40
|
|
88
88
|
sqlframe/spark/dataframe.py,sha256=_TD-h7oz0-i80r90v17UoLDoIzcGNchU2SL13ujOOic,1779
|
|
@@ -90,25 +90,25 @@ sqlframe/spark/functions.py,sha256=AQfqfvaojJzCuo9DyDklz0JYZPhn_3dzWvztsklBO0o,5
|
|
|
90
90
|
sqlframe/spark/functions.pyi,sha256=bjz6s8E6OB0c4KfTTsls7rhb_R9mIYvkaeaXefMziqM,11617
|
|
91
91
|
sqlframe/spark/group.py,sha256=MrvV_v-YkBc6T1zz882WrEqtWjlooWIyHBCmTQg3fCA,379
|
|
92
92
|
sqlframe/spark/readwriter.py,sha256=w68EImTcGJv64X7pc1tk5tDjDxb1nAnn-MiIaaN9Dc8,812
|
|
93
|
-
sqlframe/spark/session.py,sha256=
|
|
93
|
+
sqlframe/spark/session.py,sha256=cjsRQZz1kW67aajvXQyAJkv9Uh-zmmk3C3O9QSBbEQQ,5265
|
|
94
94
|
sqlframe/spark/types.py,sha256=KwNyuXIo-2xVVd4bZED3YrQOobKCtemlxGrJL7DrTC8,34
|
|
95
95
|
sqlframe/spark/udf.py,sha256=owB8NDaGVkUQ0WGm7SZt2t9zfvLFCfi0W48QiPfgjck,1153
|
|
96
96
|
sqlframe/spark/window.py,sha256=6GKPzuxeSapJakBaKBeT9VpED1ACdjggDv9JRILDyV0,35
|
|
97
|
-
sqlframe/standalone/__init__.py,sha256=
|
|
97
|
+
sqlframe/standalone/__init__.py,sha256=u-BbP0mkWWRgMz46pylFlnD3EsEBvjtMnQ6kVCAejww,993
|
|
98
98
|
sqlframe/standalone/catalog.py,sha256=oJAPxrXtra_YP_JBZCJY2qsr0TRhWG7FFSq0RHDszcU,389
|
|
99
99
|
sqlframe/standalone/column.py,sha256=E1tUa62Y5HajkhgFuebU9zohrGyieudcHzTT8gfalio,40
|
|
100
100
|
sqlframe/standalone/dataframe.py,sha256=o6weWJvDX1w351p_14PQ52qopbPozVG9OFmhaqVvivU,967
|
|
101
101
|
sqlframe/standalone/functions.py,sha256=NW-k7NP_Y9DzQq6fjX5-CL8oOUGAiaMo4SBuDd8-JUA,38
|
|
102
102
|
sqlframe/standalone/group.py,sha256=oGEbAQMSm6AlkwnBxNI8r9enZWRwsRxc8zpzoz3rArk,399
|
|
103
103
|
sqlframe/standalone/readwriter.py,sha256=EZNyDJ4ID6sGNog3uP4-e9RvchX4biJJDNtc5hkKkrY,633
|
|
104
|
-
sqlframe/standalone/session.py,sha256=
|
|
104
|
+
sqlframe/standalone/session.py,sha256=ELrDkb2wW5FhpeKJEFCQvVREmPs7ulSfMj0ipRxPUCk,1320
|
|
105
105
|
sqlframe/standalone/types.py,sha256=KwNyuXIo-2xVVd4bZED3YrQOobKCtemlxGrJL7DrTC8,34
|
|
106
106
|
sqlframe/standalone/udf.py,sha256=azmgtUjHNIPs0WMVNId05SHwiYn41MKVBhKXsQJ5dmY,272
|
|
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-
|
|
111
|
-
sqlframe-
|
|
112
|
-
sqlframe-
|
|
113
|
-
sqlframe-
|
|
114
|
-
sqlframe-
|
|
110
|
+
sqlframe-3.0.0.dist-info/LICENSE,sha256=VZu79YgW780qxaFJMr0t5ZgbOYEh04xWoxaWOaqIGWk,1068
|
|
111
|
+
sqlframe-3.0.0.dist-info/METADATA,sha256=HOOsdc0G7ea0HCIO_sY-gtr4RlXULTGFAAzxaGVMzEc,8639
|
|
112
|
+
sqlframe-3.0.0.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
|
|
113
|
+
sqlframe-3.0.0.dist-info/top_level.txt,sha256=T0_RpoygaZSF6heeWwIDQgaP0varUdSK1pzjeJZRjM8,9
|
|
114
|
+
sqlframe-3.0.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|