micromegas 0.10.0__py3-none-any.whl → 0.11.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.
@@ -1,11 +1,11 @@
1
- import certifi
2
- import pyarrow
1
+ from . import FlightSql_pb2
2
+ from . import time
3
+ from google.protobuf import any_pb2
3
4
  from pyarrow import flight
4
5
  from typing import Any
6
+ import certifi
7
+ import pyarrow
5
8
  import sys
6
- from google.protobuf import any_pb2
7
- from . import FlightSql_pb2
8
- from . import time
9
9
 
10
10
 
11
11
  class MicromegasMiddleware(flight.ClientMiddleware):
@@ -30,7 +30,8 @@ class MicromegasMiddlewareFactory(flight.ClientMiddlewareFactory):
30
30
  def start_call(self, info):
31
31
  return MicromegasMiddleware(self.headers)
32
32
 
33
- def make_call_headers( begin, end ):
33
+
34
+ def make_call_headers(begin, end):
34
35
  call_headers = []
35
36
  if begin is not None:
36
37
  call_headers.append(
@@ -48,6 +49,15 @@ def make_call_headers( begin, end ):
48
49
  )
49
50
  return call_headers
50
51
 
52
+
53
+ def make_prepared_statement_action(sql):
54
+ request = FlightSql_pb2.ActionCreatePreparedStatementRequest(query=sql)
55
+ any = any_pb2.Any()
56
+ any.Pack(request)
57
+ action_type = "CreatePreparedStatement"
58
+ return flight.Action(action_type, any.SerializeToString())
59
+
60
+
51
61
  def make_query_ticket(sql):
52
62
  ticket_statement_query = FlightSql_pb2.TicketStatementQuery(
53
63
  statement_handle=sql.encode("utf8")
@@ -57,16 +67,27 @@ def make_query_ticket(sql):
57
67
  ticket = flight.Ticket(any.SerializeToString())
58
68
  return ticket
59
69
 
70
+
60
71
  def make_arrow_flight_descriptor(command: Any) -> flight.FlightDescriptor:
61
72
  any = any_pb2.Any()
62
73
  any.Pack(command)
63
74
  return flight.FlightDescriptor.for_command(any.SerializeToString())
64
75
 
76
+
65
77
  def make_ingest_flight_desc(table_name):
66
- ingest_statement = FlightSql_pb2.CommandStatementIngest(table=table_name, temporary=False)
78
+ ingest_statement = FlightSql_pb2.CommandStatementIngest(
79
+ table=table_name, temporary=False
80
+ )
67
81
  desc = make_arrow_flight_descriptor(ingest_statement)
68
82
  return desc
69
83
 
84
+ class PreparedStatement:
85
+ def __init__(self, prepared_statement_result ):
86
+ self.query = prepared_statement_result.prepared_statement_handle.decode('utf8')
87
+ reader = pyarrow.ipc.open_stream(prepared_statement_result.dataset_schema)
88
+ self.dataset_schema = reader.schema
89
+ reader.close()
90
+
70
91
  class FlightSQLClient:
71
92
  def __init__(self, uri, headers=None):
72
93
  fh = open(certifi.where(), "r")
@@ -97,6 +118,20 @@ class FlightSQLClient:
97
118
  for chunk in reader:
98
119
  yield chunk.data
99
120
 
121
+ def prepare_statement(self, sql):
122
+ action = make_prepared_statement_action(sql)
123
+ results = self.__flight_client.do_action(action)
124
+ for result in list(results):
125
+ any = any_pb2.Any()
126
+ any.ParseFromString(result.body.to_pybytes())
127
+ res = FlightSql_pb2.ActionCreatePreparedStatementResult()
128
+ any.Unpack(res)
129
+ return PreparedStatement(res)
130
+
131
+ def prepared_statement_stream(self, statement):
132
+ # because we are not serializing the logical plan in the prepared statement, we can just execute the query normally
133
+ return self.query_stream( statement.query )
134
+
100
135
  def bulk_ingest(self, table_name, df):
101
136
  desc = make_ingest_flight_desc(table_name)
102
137
  table = pyarrow.Table.from_pandas(df)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: micromegas
3
- Version: 0.10.0
3
+ Version: 0.11.0
4
4
  Summary: Python analytics client for https://github.com/madesroches/micromegas/
5
5
  Author: Marc-Antoine Desroches
6
6
  Author-email: madesroches@gmail.com
@@ -16,7 +16,7 @@ Requires-Dist: grpcio (>=1.69.0,<2.0.0)
16
16
  Requires-Dist: numpy (>=2.2.6,<3.0.0)
17
17
  Requires-Dist: pandas (>=2.2.2,<3.0.0)
18
18
  Requires-Dist: protobuf (>=5.29.1,<6.0.0)
19
- Requires-Dist: pyarrow (>=18.1.0,<19.0.0)
19
+ Requires-Dist: pyarrow (>=20.0.0,<21.0.0)
20
20
  Requires-Dist: tabulate (>=0.9.0,<0.10.0)
21
21
  Requires-Dist: tqdm (>=4.66.5,<5.0.0)
22
22
  Description-Content-Type: text/markdown
@@ -1,7 +1,7 @@
1
1
  micromegas/__init__.py,sha256=oh0BAfNUVpHtFgufYWxvPwRfnqBTXY_nTPrNW1cwn-s,225
2
2
  micromegas/flightsql/FlightSql_pb2.py,sha256=s3CVAQ4W77ALQ9QYFlPZnPqVsRHTD5Ma0fzabQv_8Mc,28207
3
3
  micromegas/flightsql/__init__.py,sha256=VWuldsAd-N7tjSdaN_bSKefFJB26zrJzO4aKtO6y60g,74
4
- micromegas/flightsql/client.py,sha256=2-twcMglhxDjVN2dJVdpkMH8can1y3eOweLDcXUZXug,6425
4
+ micromegas/flightsql/client.py,sha256=1fV8FBPF18gsXGA_y4NEFWAV7ze9PvsKPToLw4_2xWM,7674
5
5
  micromegas/flightsql/time.py,sha256=EH3SUEpFvY0lNMj9mOcvfUJuSgrQ3YX4aJnwteK2qhk,582
6
6
  micromegas/perfetto.py,sha256=mXtkQMZ5y9LhyanKWjf3BwehEW_vVR_MtTPrUgsehZ4,7449
7
7
  micromegas/thirdparty/perfetto/protos/perfetto/common/android_energy_consumer_descriptor_pb2.py,sha256=l8QNXqnB-mJIkuFr2s1YoLQXHm3G-ZcOGp_OW_hQ0TE,1887
@@ -210,6 +210,6 @@ micromegas/thirdparty/perfetto/protos/perfetto/trace/translation/translation_tab
210
210
  micromegas/thirdparty/perfetto/protos/perfetto/trace/trigger_pb2.py,sha256=We7Yi8o3cEcrSNxY1zLUUO6tEWnD36C2f3O_s8_qv0I,1435
211
211
  micromegas/thirdparty/perfetto/protos/perfetto/trace/ui_state_pb2.py,sha256=Af-SXwhroNhRXMrtw6e2eU1liCImMRxSdmkt_AuSHf8,1752
212
212
  micromegas/time.py,sha256=eD9fWF2UHxaf-92yd1X2SEgUcpKypqPsvjBosLdpnQA,1026
213
- micromegas-0.10.0.dist-info/METADATA,sha256=k8G00oA-sslcATd5iFh2ihWHrMKzogyXjNVCxNcpicM,30649
214
- micromegas-0.10.0.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
215
- micromegas-0.10.0.dist-info/RECORD,,
213
+ micromegas-0.11.0.dist-info/METADATA,sha256=KjIEUAgYRbNIE3tdafhT7RaeshehJY6l6RcPdRvsrcc,30649
214
+ micromegas-0.11.0.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
215
+ micromegas-0.11.0.dist-info/RECORD,,