2

次のスキーマを持つ Cassandra 列ファミリ (Pycassa を使用して作成) があります。

ColumnFamily: tracker
  Key Validation Class: org.apache.cassandra.db.marshal.CompositeType(org.apache.cassandra.db.marshal.UTF8Type,org.apache.cassandra.db.marshal.DateType)
  Default column value validator: org.apache.cassandra.db.marshal.BytesType
  Cells sorted by: org.apache.cassandra.db.marshal.UTF8Type
  GC grace seconds: 864000
  Compaction min/max thresholds: 4/32
  Read repair chance: 0.1
  DC Local Read repair chance: 0.0
  Populate IO Cache on flush: false
  Replicate on write: true
  Caching: KEYS_ONLY
  Bloom Filter FP chance: default
  Built indexes: []
  Compaction Strategy: org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy
  Compression Options:
    sstable_compression: org.apache.cassandra.io.compress.SnappyCompressor

次の行で挿入しようとしています:

self.tracker_batcher.insert(tracker_key, dictionary_to_insert)

どこにtracker_keyある:

('cd7449e8-8f0d-4730-9ee4-ef60edfdd409', datetime.datetime(2013, 8, 14, 16, 47, 55, 856000))

これが機能することを期待しています-他のテーブルの日付型を行キーとして使用し、それらは扱います。さらに、Pycassa サイト ( http://pycassa.github.io/pycassa/assorted/composite_types.html ) のチュートリアルに従っているようです。

詳細については、Pycassa バージョン 1.9.0 と Cassandra 1.2.8 を使用しています。

ありがとう、

マット

編集:

奇妙なひねりを加えたイベントで、最初に受け取ったエラー メッセージは次のとおりです。

TypeError: A str or unicode value was expected, but datetime was received instead (2013-08-14 16:45:15.376000)

クエリを次のように変更してみました。

tracker_key = (str(dictionary_to_insert['session_id']), datetime.datetime.strftime(dictionary_to_insert['datestamp'], "%Y-%m-%d %H:%M:%S"))

つまり、日時を文字列に変更しました

次のエラーメッセージが表示されました。

    raise TypeError('DateType arguments must be a datetime or timestamp')
TypeError: DateType arguments must be a datetime or timestamp

困惑。

4

1 に答える 1