使用python或SQL在表或数据库中存储和更新数据点/表/csv表的最有效方法?
我只是边走边学习,所以我不确定如何实现我想要的,因为我不知道我可以使用的所有工具。我不知道该怎么问这个问题,但问题来了 我正在使用谷歌云计算引擎从各种传感器/来源收集数据 数据使用python和pandas以以下格式保存到csv文件中使用python或SQL在表或数据库中存储和更新数据点/表/csv表的最有效方法?,python,sql,postgresql,csv,google-cloud-platform,Python,Sql,Postgresql,Csv,Google Cloud Platform,我只是边走边学习,所以我不确定如何实现我想要的,因为我不知道我可以使用的所有工具。我不知道该怎么问这个问题,但问题来了 我正在使用谷歌云计算引擎从各种传感器/来源收集数据 数据使用python和pandas以以下格式保存到csv文件中 Data1.csv Date Data1 01-Jan-2000 122.1 ... 09-Oct-2020 991.2 Date Data2 01-Jan-2000 101.1 ... 09-Oct-2020 331.2
Data1.csv
Date Data1
01-Jan-2000 122.1
...
09-Oct-2020 991.2
Date Data2
01-Jan-2000 101.1
...
09-Oct-2020 331.2
Date Data1 Data2 ......
01-Jan-2000 122.1 101.1 .....
...
09-Oct-2020 991.2 331.2 ....
Data2.csv
Date Data1
01-Jan-2000 122.1
...
09-Oct-2020 991.2
Date Data2
01-Jan-2000 101.1
...
09-Oct-2020 331.2
Date Data1 Data2 ......
01-Jan-2000 122.1 101.1 .....
...
09-Oct-2020 991.2 331.2 ....
总是有一个日期列和一个唯一的数据列
有时是每天,有时是每周。不同的数据集具有不同的分辨率、频率等
当我得到数据表时,我总是得到整个历史,因为有时历史数据中可能会有需要更新的变化
现在,我要做的是将所有csv文件保存到服务器上,然后将它们逐个下载到我的计算机上,并使用python使用完整的外部联接合并它们
df = pd.merge(Data1df,Data2df,how='outer',left_index=True,right_index=True)
我在循环中一个接一个地这样做,直到我创建了一个大数据帧
bigframe.csv
Date Data1
01-Jan-2000 122.1
...
09-Oct-2020 991.2
Date Data2
01-Jan-2000 101.1
...
09-Oct-2020 331.2
Date Data1 Data2 ......
01-Jan-2000 122.1 101.1 .....
...
09-Oct-2020 991.2 331.2 ....
我需要一个大框架中的大框架表来处理
当我每天更新数据时,我会一个接一个地重复上面的所有步骤,然后重新创建bigframe表
我觉得我的工作效率很低
我需要如何使这更有效的建议,我不知道从哪里开始
我以前从未使用过SQL或任何类型的数据库。有人告诉我,这是一种更有效的存储/操作/更新数据的方法
我想知道我是否做了之前在我描述的示例中所做的一切
是否可以创建一个数据库,将dataframes/csv表保存为SQL表中的列
有没有一种方法可以将csv数据作为新列直接添加到SQL表中,而无需将其保存到我的计算机
我还担心不同的服务器同时访问数据库和更新值,当两个不同的“用户”更新同一个表(但不同的列,而不是同一列)时会不会发生冲突
如果该列存在,有没有办法轻松更新该列?一下子就有很多问题。我将尝试提供一些答案
psql
客户端中输入或\copy
从客户端用户的角度工作,而copy
从服务器用户的角度工作。虽然由于您使用的是Python,并且可能是“psycopg2,所以您可以访问[COPY](https://www.psycopg.org/docs/usage.html#copy)在Python客户端中。无论哪种情况,您都需要提前为数据创建表。这导致了2)
创建表
一些用于每日数据转储的保留表。您可以执行截断
表,然后将整个新集合复制到表中<代码>复制
非常快。需要注意的是,如果出现错误,整个副本将回滚
创建表格
数据的最终表格。然后,您可以使用连接来使用保留表中的信息在最终表上插入、更新、删除
我更新了我的问题,我忘了问,如果多个服务器试图访问数据库,会不会发生冲突?假设一台服务器正在添加列Data200952,另一台服务器正在更新列Data3,是否不允许一台服务器访问数据库?或者会有一些排序的队列吗?我可以创建一个空表开始,然后慢慢添加列,等等,你是说我必须为每个数据列创建一个单独的表,还是说在它进入大表之前只是一个临时表?不确定是哪个服务器(s0)您正在谈论的?数据库将只是一台服务器。您将创建的表取决于数据的性质。如果有一列(如日期)将不同的数据集联系在一起,那么您可以拥有一个表。您可以看看这个问题吗?