diff --git a/README.md b/README.md index 6746c2fc00db4c234697e8e7bc1532a4a820675f..7b4a94855103a224d9874c9a834ebbb161bfe535 100644 --- a/README.md +++ b/README.md @@ -74,6 +74,33 @@ External CSV files can be imported into a table: table = dataset.create_table_from('https://www.data.gouv.fr/fr/datasets/r/c0f59f00-3ab2-4f31-8a05-d317b43e9055', sep=';') df = table.aspandas() ``` + +## Creation of a table from a query +The tables from different datasets can be combined in a query. + +```python +import pandas as pd + +dataset1 = project.create_dataset('dataset1') +df_fruits = pd.DataFrame({'x': 6 * ['fruit'], 'y': list('🍓🥝🍇🍐🍏🍍')}) +fruits = dataset1.create_table_from(df_fruits, 'fruits') +fruits.aspandas() + +dataset2 = project.create_dataset('dataset2') +df_vegetables = pd.DataFrame({'x': 5 * ['vegetable'], 'y': list('🥑🌽🥒🍆🥦')}) +vegetables = dataset2.create_table_from(df_vegetables, 'vegetables') +vegetables.aspandas() + +dataset3 = project.create_dataset('dataset3') +query = """ +SELECT * FROM dataset1.fruits +UNION +SELECT * FROM dataset2.vegetables +ORDER BY x, y +""" +food = dataset3.create_table_as(query, 'food') +food.aspandas() +``` ## Creation of a table from an ESAP ESFRI query We can store the result of an ESAP-API query into a table that belongs to the dataset that we have just created. diff --git a/esap_client/models/datasets.py b/esap_client/models/datasets.py index bda40c1680a88923e7e7bc1ca8a5650aa19f3d7f..bb50e45da604bf58846ac959263dad1bcd97108a 100644 --- a/esap_client/models/datasets.py +++ b/esap_client/models/datasets.py @@ -71,6 +71,22 @@ def create_table_from( raise_for_status(response) return Table.deserialize(response.json()) + def create_table_as( + self, query: str, name: Optional[str] = None, description: str = '' + ) -> Table: + """Creates a table from a SQL query.""" + if not isinstance(query, str): + raise TypeError('The query is not a string.') + + payload = { + 'name': name, + 'description': description, + 'query': query, + } + response = self.session.post('/tables', payload) + raise_for_status(response) + return Table.deserialize(response.json()) + def create_table_from_esap_gateway_query( self, query: dict, name: str, description: str = '' ) -> Table: