Ich versuche, ein Datenbankschema zu entwerfen, die auf einer Reihe von Daten arbeiten muss, die wie folgt aussieht:Redshift Schema-Design
Events
event_id|time|key1|key2|data
Und es braucht, um Abfragen auszuführen wie diese effizient:
Erhalten Sie alle Veranstaltungen, bei denen Schlüssel1/key2 = ... und die Zeit zwischen ... und ...
Ein Schema ich gedacht wäre
Events
primary_key=event_id|key1|key2|data
Key1Lookup
primary_key=key1|sortkey=time|event_id
Key2Lookup
primary_key=key2|sortkey=time|event_id
Damit meine Abfrage wie
SELECT data FROM Events, Key1Lookup WHERE key1=... AND time BETWEEN ... AND ... AND Events.event_id = Key1Lookup.event_id
oder
SELECT data FROM Events, Key2Lookup WHERE key2=... AND time BETWEEN ... AND ... AND Events.event_id = Key2Lookup.event_id
scheint dies wie die rechte Taste Auswahl/Abfrage-Design aussehen könnte? Ich bin völlig neu in der Rotverschiebung, also brauche ich hier wirklich Anleitung.
Zusätzliche Informationen: Die event_id ist einzigartig. In Key1Lookup ist key1 nicht eindeutig, aber es gibt nur ein paar Wiederholungen in Key1Lookup (denken Sie daran wie eine user_id in einer Kommentartabelle). In Key2Lookup ist key2 nicht eindeutig, aber es gibt nur ein paar Wiederholungen in Key2Lookup (denke an eine location_id in einer Kommentartabelle). Es gibt eine große Anzahl unterschiedlicher key1s, und es gibt eine große Anzahl unterschiedlicher key2s. Ich erwarte, dass sich die Anzahl der Schlüssel1 stark erhöht, und ich erwarte, dass sich die Anzahl der Schlüssel2 deutlich erhöht.
Also der einzige Unterschied, den Sie vorschlagen, ist event_id den distkey zu machen, richtig? – michaelsnowden
siehe Punkt # 2 oben: Ich sagte, es hat keinen Sinn, einen dist-Schlüssel in Ihrem Setup zu haben.Sehen Sie Punkt # 3: Sie können event_id als Primärschlüssel setzen, wenn Sie möchten. –
meine wichtigste Empfehlung ist es, denormalisierte Daten zu haben, im Gegensatz zu der normalisierten, die Sie im Sinn haben. Ich denke, ich habe genug Gründe dafür angeführt –