【问题标题】:Cannot copy csv file inside a cassandra table无法在 cassandra 表中复制 csv 文件
【发布时间】:2018-10-02 22:47:00
【问题描述】:

我使用 COPY/TO 创建了一个标准 csv 文件,现在我想在另一个 cassandra 表中使用 COPY/FROM 上传内容。但是,我收到以下错误:

Failed to import 5000 rows: Error - field larger than field limit (131072),  given up after 1 attempts
Exceeded maximum number of insert errors 1000
Failed to process 5000 rows; failed rows written to import_point_labeled_results.err
Exceeded maximum number of insert errors 1000
Processed: 0 rows; Rate:       0 rows/s; Avg. rate:       0 rows/s
0 rows imported from 0 files in 6.639 seconds (0 skipped).

csv 有大约 900k 个条目。是的,某些列内容大于 131072,但这是不可避免的,无法更改。如何解决此问题/绕过此问题?我真的很想这样做,而不必重新启动整个集群。

编辑:

我尝试遵循更改 ./cqlshrc 的建议并增加 field_size_limit 但是当我将其增加到 10000000000000000000 时出现此错误:

Traceback (most recent call last):
 File "/usr/bin/cqlsh.py", line 2421, in <module>
   main(*read_options(sys.argv[1:], os.environ))
 File "/usr/bin/cqlsh.py", line 2329, in main
   csv.field_size_limit(options.field_size_limit)
TypeError: limit must be an integer

即使我将值降低到最低限度,上传我的 csv 中的所有内容仍然不够,任何更高的值都会引发此错误。 有其他选择吗?

编辑 2;

csv 文件不超过 10 列,但其中一列包含分析结果,并且可以包含大量数据。 csv 中的一行是:

peinfo,sample,287da2f0-61f0-11e7-89ae-000c2936efb4,NotSend,,2017-07-06 02:09:35.745+0000,{'NotSend'},0x1f8b080000096e8800ffa4586f73d33e12fe2a19bfba9b819c6c59b6c5bb9216a603fd734d809bfbc17864699d086ccb232ba13d86ef7e2bbba569089ccde545eb3fcfb3fb6877bdd6fa5b60b5dce41b100a6cf062f62d901b905fba6d8d27599424619666f4d92cd8896a0b5d6ec557bcf117cf5292b267b3f0d92c618c26f8cf1f129e651e1de2ad248a38671e93fabb491c87bc27304ea2a8277f42bbdd46442c419b01c94070224998aa8c11051945d74009489a15124d33a0715a1694a88ca452b10292a4104a71c9532ee3e051652b6c07ca0bfd16ecc076da347812138a5e03a76b846c0700ea09747fc0be3f9beda3c9213479c41e408f1a660f684ec7c0d31ff04321bf95cde34968f2fdd3777f52b71bd16d7cd455c14320f88b4afc6554c80218e12a8b32c29350f4511dace7ba29cd7d507d9c3dfde3c75bc167175a5ad399d2cd16c6b6c60a87f0f9eca4aa6656af37ae9b59e8c0ee40cdbdbd2f70e7b96f612daa8569ef7a4c302ce4c1705338ef6e0eb7b047396f1cd8465497a28603029b47739a72320f334a667febec8ed0bc6bc3dcba7a4e18a151fc3c8ce3f4ef7be65ee90adedf87eea9b5a32bda632e4cdd8ae6ee888e1f4c1f1a987dd08d325fbbe1e4aa056fa959cf96779d837acfe0b5356a2bddff5ad8cf8ce3fa578beb7f9c5fcf2ec1bdd4a69b9d63286d7db808bffc53e8a4d5adfbd9c4f10c5c61b23466c0739b5eeca7a1a08c75dd501ce5b6916ea8c620cf3b705886def906acf5965455f95b75b793d6cdfd59eff8094d37da61aaebb1f87c0dae1628ccaebbd11cef049add58bc845bedc682ff255b8731c2358c654cb12ed4e76de7f252e9b1ea85337a24748290ced946b67723d135d4b5d9c158dbadd58d2b47a2f5001f1bc0af16533f12bc9ba624cfdb3c2f6ba3c6daef09d2d49328f858e5a26d7377d78e26c1ad84d6e51bd1a80a2c1d5df7934a539ac6595395ed48c20dac1795e9e00dec97d1c9e9fb93eb731afd9283adb441cad9edc914d63fb760efdefb0e3785f81adc626b2d340e7bae846ebfc3bc39bbb93c7bfb2be60a5b183625075389e8727845acf0457ed2f96eeb8fa6f09f4a3e577fc05d6d2c6e0c2750df354371a9b3bed4f0ea4f3df0f706fa045d83ed5f578d8485d93653f8cb0aa01d8d7e6ba4a8709762e434ca2b0be35371b1ad9c7e79e760653e68058b8d18bf9c07c2cafcb0323e14e0feef74bcea770d17583f620d27532a68a5e5973e79a34937ae7ad768894d70e9b0dfae57e6a4e9f470bc67a4717870dcc2a5eb3bc93830baf3699ceac3ab6ca5e8e040eb15d413cd9cdde2e643817a8b7b16f01bdb35d853bdd36ae4022edd29ecb48473b3185aae6f1263a91f847698dc250aaee0aaf80cd28d167e8edba6896b7d8cf2ca3c09dce8c4622372307e85f7d9fd035fc87cfdeefcf495355313eae3f2070eb17256c63fe42fb765b9ff8cbd5b9eddfcea61199a0252a7901a6736d51ef6c3f26af1e65760635518926c2c5c1be9aacec82fe0c6522e37d827fa89ae1412fce4e3833e14f5ebadde7febe87653b5a2d583a14f7b33e94ef8cf167ff94b2d3c0cb571c109843c85b2a409291989250d2510092025670c421a6711ef3f19f493b213751bf8af1f9b2dbe76f2fd6b4144087b4ee8f388ad087941e98b88fefb9018e22fc568113feb070a8aed7a98854efde152affb12599e2e3df1427c36f6fd930f0dd746fb38accc8df87a2a9cf070729b867df82f747388f77b01c4619d1dfac79bbdcf93b51fe2fce4df6d8b7e93f8c247281fb4e1659cc8f195120c831eaec3cd5b55044f6cf735fc2402b38708040f7eae71ae3b6664f018e1e152ff07aecafb55f94f4503d13f649e58101ed184c7711c4ac5e294ab42c5691a252c8e92388d8674a3f20efacab91f32c1b7bcd68fa4c93c8a319724cb520c0125dee73d36ef275474327770eb3e6efd778efdbffdc70d6d7127ad94f5dbb33eece1fe9d0ed5e3e58c2699b77b7f969218cf6ac53ca34c4ac58bb42c3957095194f222e44a315c4686733b1d2aff51304ef229635112f130612ce3d951c50a033656717c44711cb37dc92c8c1e15f3822682c5a22c64c2b3509669c9221a9510c95286941f2aa6731a71c6d3087f614623961e536c3b2bc72a2e8f28c6fae5c9a3e230c4fc3f6a0e0549b348489e1211ab52821045c430e7519626112bb04ebeff170000ffff010000ffff96302a6dce140000,1,NotSend,81dbe6ba82bb0311aa0b311bae06781302345cd6e07d5bdd3d7eae08a37bb8a0,{'NotSend'},{'NotSend'},,NotSend,['NotImplemented'],NotImplemented,NotImplemented

【问题讨论】:

  • 你有多少列?你能展示你的 csv 文件的样本吗?
  • 我在编辑 2 下的帖子中添加了这些详细信息
  • 我认为问题在于您的 csv 格式。某些列可能包含带有未转义逗号的文本。这就是为什么 cqlsh 认为它是另一个列。

标签: csv cassandra cassandra-3.0


【解决方案1】:

看看cqlshrc.sample文件(位置取决于你的安装,你可以在github看到它,否则你会发现你可以增加这个限制。

[csv]
;; The size limit for parsed fields
; field_size_limit = 131072

所以你应该编辑你的 .cqlshrc(通常在 ~/.cassandra/cqlshrc,你可能需要创建它)来配置这个限制。

【讨论】:

  • 没有。它纯粹是在您启动 cqlsh 时加载的客户端配置。只需确保在您将启动 cqlsh 并发出 COPY 命令的机器上配置它。
  • 你能检查我的编辑吗?这个解决方案有效,因为它改变了限制,但上传仍然不起作用
  • 你为 field_size_limit 使用了什么值?
  • 10000000000000000000,小于这个值,它仍然不会上传大多数csv行
  • 你可以试试 9223372036854775807 吗?我认为这是 sys.maxint 的最大 int
【解决方案2】:

我遇到了同样的错误。问题是(就我而言)我的硬盘驱动器上没有足够的空间。 错误消息有时并不能描述真正的问题。

【讨论】:

    【解决方案3】:

    我在 Docker 上遇到了同样的错误。简短的回答是:

    可以在官方 Cassandra Docker 容器的 /etc/cassandra 中找到名为 cqlshrc.sample 的文件。您将找到如下所示的代码块,您将对其进行编辑以匹配下面进一步显示的内容,将文件重命名为 cqlshrc 并将其移动到 /root/.cassandra/ 并重新启动 cqlsh shell。

    [csv]
    ;; The size limit for parsed fields
    ; field_size_limit = 131072
    

    如图所示将限制设置为更高的数字并取消注释该行。

    [csv]
    ;; The size limit for parsed fields
    field_size_limit = 1000000000
    

    cqlshrc 文件具有包括cqlsh 工具凭据在内的配置。您可以找到更多信息here

    Cassandra Docker 用户的步骤:

    1. 在主机中,打开一个文件夹并从中启动终端。
    2. 使用docker ps 命令获取容器ID。
    3. 将 Docker 容器中的文件复制到主机以编辑如上所示的内容,使用命令:docker cp &lt;CONTAINER ID&gt;:/etc/cassandra/cqlshrc.sample .(不要忘记点)。请注意,您也可以在此处使用终端技能。
    4. 使用docker cp cqlshrc &lt;CONTAINER ID&gt;:/root/.cassandra/ 将编辑和重命名的文件复制到根目录中隐藏的cassandra 目录。如果在容器中找不到目标目录,请使用cd ~ 导航到根目录,然后使用mkdir .cassandra 创建一个。
    5. 摆脱您当前可能使用的 CQLSH shell 并打开一个新的 shell,您应该一切就绪!

    【讨论】:

      猜你喜欢
      • 2015-04-23
      • 2016-09-29
      • 2014-11-06
      • 2020-02-22
      • 1970-01-01
      • 2019-08-10
      • 2020-12-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多