問題タブ [snowflake-schema]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
relational-database - 時系列データの正規化
多くのイベントを保存するデータベースを作成しています。それらはたくさんあり、それぞれに秒単位の正確な時間が関連付けられています。例として、次のようなものがあります。
アクション、ソース、およびターゲットはすべて 6NF にあります。テーブルを正規化したままにしたいのですEvent
が、考えられるすべてのアプローチには問題があります。データに対する私の期待を明確にするために、大部分 (99.9%) のイベントは上記の 4 つのフィールドだけで一意になります (したがって、行全体を PK として使用できます)。ただし、いくつかの例外は無視できません。 .
代理キーを使用する: 4 バイトの整数を使用する場合、これは可能ですが、理由もなくテーブルを膨らませているように見えます。さらに、データベースを長期間使用してキースペースを使い果たすことも懸念しています。
カウント列をイベントに追加:カウントが小さいと予想されるため、より小さいデータ型を使用できます。これにより、データベース サイズへの影響が小さくなりますが、挿入前にアップサートまたはデータベース外でデータをプールする必要があります。どちらも複雑さが増し、データベース ソフトウェアの選択に影響を与えます (アップサートを行う Postgres を使用することを考えていましたが、喜んでではありませんでした)。
イベントを小さなグループに分割する:たとえば、同じ秒内のすべてのイベントは
Bundle
、グループの代理キーとその中の各イベントの代理キーを持つことができる の一部である可能性があります。これにより、抽象化とサイズの別のレイヤーがデータベースに追加されます。そうでなければ重複したイベントが一般的になれば良い考えですが、それ以外の場合はやり過ぎのように思えます。
これらはすべて実行可能ですが、私のデータにはあまり適していないように感じます。メインテーブルに一意性制約を適用せずに典型的なSnowflakeを実行することを考えていましたが、このEvent
ようなPerformanceDBAの回答を読んだ後、もっと良い方法があるのではないかと思いました.
では、正規化された少数の繰り返しイベントで時系列データを保持する正しい方法は何ですか?
編集:明確化 - データのソースはログで、ほとんどがフラット ファイルですが、いくつかはさまざまなデータベースにあります。このデータベースの 1 つの目標は、それらを統合することです。秒単位よりも正確な時間分解能を持つソースはありません。このデータは、「一定間隔でターゲットに対してアクションを実行した異なるソースの数は?」などの質問に使用されます。ここで、Interval は 1 時間以上です。
data-modeling - スノーフレーク スキーマ ディメンション
BI プロジェクトに取り組むのはこれが初めてで、Pentaho 製品にはまだ慣れていないので、次のモデルが正しいかどうか、後で BI サーバーで階層を作成するときに問題に直面しないかどうかを知る必要がありました。 !
ありがとうございました。
時間次元:
合併症の次元、すべての合併症はサブ合併症を持つことができます:
mondrian - 複数レベルのモンドリアンを持つスノーフレーク ディメンション
私のテーブル構造は次のとおりです
今、私はグレードとレベルをディメンションのレベルとして持つ必要があります。
「dim_question_tbl」テーブルに書き込まれたキューブ。
寸法を次のように書きました
これは機能しません。私が得ている例外は、「[グレード]」には少なくとも1つのレベルが必要です。
SQLクエリでも試してみました
SQLクエリでも同じ例外が発生します。
スノーフレークスキーマで複数のレベルを取得するにはどうすればよいですか?
sql-server - OLAP と OLTP 間のリレーショナル整合性
私はクライアントのアーキテクチャ、特に SQL Server の通常の古いスノーフレーク スキーマである OLAP システムを見直してきました。ファクトとディメンションは、ERP などの他のトランザクション システムから ETL されます。
私が驚いたことの 1 つは、複数の追加の OLTP アプリケーション用に、同じデータベース内に複数のテーブルが追加されたことです。これらのテーブルには、スノーフレーク スキーマのディメンション テーブルへの FK 関係があります。
OLTP システムからのディメンション データへの結合が多いため、パフォーマンスが最適ではありません。
私は OLAP の専門家ではありません。しかし、これは間違っているように感じます。私はいくつかの検索を行いましたが、賛否両論のインターネット上でこれについて多くを見つけることができません. これを行う利点は何ですか?いずれかがあります?潜在的な問題についてはどうですか?
data-warehouse - ディメンション モデリング - さまざまなディメンションの複合キーで使用される共通の属性
私は今まで直面したことのない状況に直面しています。
サテライト ロケールによって異なる、同じ ERP システムの複数のインスタンスがあります。各ロケールには独自の ID が割り当てられます。
各サテライト ロケーション内で、DB スキーマは他のものと同じで、同じテーブル、同じ値です。
これらのロケールの 2 つ以上のテーブル、たとえばパーツを組み合わせる場合、それらの自然操作キーは同じになりますが、追加の属性データは異なる場合があります。また、パーツがどのサテライト ロケールから来たかに基づいてパーツにリンクできるようにする必要があるため、ここで複合キー (パーツ ID とサテライト ID) が必要だと考えています。
これは、この 1 つのディメンションでは問題ありませんが、このサテライト ID は他の多くのディメンションでも同じように使用されます。また、多くのファクト テーブルの主要なスライサーでもあります。
この属性をどのように扱うべきですか? それを独自の次元に置き、スノーフレーク?または、値を各ディメンション (複製) にプッシュしますが、ファクト テーブルにサテライト ディメンションへの唯一の FK を保持させますか?
amazon-s3 - スノーフレーク テーブルにミリ秒単位で日時をインポートする方法
csv ファイルを作成し、これらのファイルを AWS S3 バケットにアップロードしました。csv ファイルでは、タイムスタンプ列を取得し、タイムスパン列のデータは次のようになります。
「2006-10-01 18:26:47.523」
この値をスノーフレークにインポートしようとするたびに、レコードが次のように挿入されます
10 OCT 2014 18:2647 700、ミリ秒の列でデータをインポートできるように、どんな体でも私を導くことができます。
ありがとうシュリ