Sqlite

Python SQLite3按字元串列水平分區

  • October 5, 2018

我有一個 30 GB 的 SQLite 3 數據庫,其中包含一個包含 2500 萬行的表。我想按字元串列對錶進行分組,並為每組記錄創建一個新表,以字元串命名並包含所有列。

這對 Python 和 SQLite 3 可行嗎?我可以在 Python 中處理塊,但是有 SQL 命令嗎?

起始表

all_entries

a   b   c   d
hi  4   234 lala
bye 7   342 lulu
bye 5   433 abc
bye 4   234 abd
hi  56  435 abc
hi  3   455 a

結果表

bye

a   b   c   d
bye 7   342 lulu
bye 5   433 abc
bye 4   234 abd

hi

a   b   c   d
hi  4   234 lala
hi  56  435 abc
hi  3   455 a

這可以根據官方 SQLite 文件實現如下。

對於bye表格,您可以使用以下內容:

CREATE TABLE bye AS 
SELECT a, 
      b,
      c,
      d,
FROM all_entries
WHERE a = 'bye'

…對於hi桌子:

CREATE TABLE bye AS 
SELECT a, 
      b,
      c,
      d,
FROM all_entries
WHERE a = 'hi'

參考: CREATE TABLE(SQLite 理解的 SQL)

如果這只是您希望實現的目標的臨時解決方案,請添加TEMPORARY關鍵字:

CREATE TEMPORARY TABLE bye AS...

這種方法存在一些限制,在參考文章中進行了描述。

使用 CREATE TABLE AS 創建的表沒有 PRIMARY KEY 也沒有任何類型的約束。每列的預設值為 NULL。新表的每一列的預設排序規則是 BINARY。

使用 CREATE TABLE AS 創建的表最初由 SELECT 語句返回的數據行填充。行被分配連續升序的 rowid 值,從 1 開始,按照 SELECT 語句返回的順序。

你可能不得不在 Stack Overflow 上發布一個問題以獲取 Python 解決方案。

引用自:https://dba.stackexchange.com/questions/219264