Я новее без sql, и мой опыт основан на sql db (mysql). В последние месяцы я начал работать с большими данными и выбрал cassandra в качестве no-sql db.
Это моя среда разработки:
- убунту 12.04 64 бит
- cqlsh 4.1.1
- Кассандра 2.0.6
- Спецификация CQL 3.1.1
- Бережливый протокол 19.39.0
Мой ввод - это ежедневные CSV-файлы со многими столбцами, и мне нужно импортировать только некоторые из этих столбцов. Структура файла csv user_id => text
- col_A => интервал
- col_B => интервал
- col_C => интервал
- other_col => не импортировать
- .....
- .....
- .....
- other_col => не импортировать
Каково условие импорта строки csv? значение столбцов user_id + col_A + col_B + col_C должно быть уникальным.
Затем я подумал создать таблицу с таким количеством первичных ключей, как и столбцов.
CREATE TABLE unique_value (
user_id text,
col_A int,
col_B int,
col_C int,
PRIMARY KEY (user_id, col_A, col_B, col_C)
) WITH
bloom_filter_fp_chance=0.010000 AND
caching='KEYS_ONLY' AND
comment='' AND
dclocal_read_repair_chance=0.000000 AND
gc_grace_seconds=864000 AND
index_interval=128 AND
read_repair_chance=0.100000 AND
replicate_on_write='true' AND
populate_io_cache_on_flush='false' AND
default_time_to_live=0 AND
speculative_retry='99.0PERCENTILE' AND
memtable_flush_period_in_ms=0 AND
compaction={'class': 'SizeTieredCompactionStrategy'} AND
compression={'sstable_compression': 'LZ4Compressor'};
Во время импорта будут вставлены только уникальные значения комбинации «user_id + col_A + col_B + col_C» файла csv, и это то, что я хочу.
После импорта мне нужно запросить таблицу, чтобы получить общее количество уникальных user_id (не дублированных), сгруппированных по значениям col_B. В sql запрос должен быть
SELECT COUNT(b.user_id), b.col_B(
(SELECT COUNT(user_id) AS is_user_exclusive, user_id, col_B FROM unique_value
GROUP BY col_B
HAVING is_user_exclusive < 2) AS b
GROUP BY b.col_B
но я все еще не могу найти правильный запрос cql или, возможно, правильное моделирование данных.
У вас есть подсказки?
заранее спасибо