22
33[ Data queries] ( ../query-objs ) make use of operators to derive the desired table. They
44represent the desired data symbolically, but do not contain any data. Once a query is
5- formed, we can [ fetch] ( .. /common-commands#fetch ) the data into the local workspace. Since
5+ formed, we can [ fetch] ( ./common-commands#fetch ) the data into the local workspace. Since
66the expressions are only symbolic, repeated ` fetch ` calls may yield different results as
77the state of the database is modified.
88
@@ -50,7 +50,7 @@ In order for these operators to be applied to tables, they must also be
5050<span id =" join-compatible " >** join-compatible** </span >, which means that:
5151
52521 . All fields in both tables must be part of either the
53- [ primary key] ( ../../../ glossary#primary-key ) or a [ foreign key] ( ../../.. /glossary#foreign-key ) .
53+ [ primary key] ( ../concepts/ glossary#primary-key ) or a [ foreign key] ( ../concepts /glossary#foreign-key ) .
5454
55552 . All common fields must be of a compatible datatype for equality comparisons.
5656
@@ -65,23 +65,23 @@ In order for these operators to be applied to tables, they must also be
6565
6666The Join operator ` A * B ` combines the matching information in ` A ` and ` B ` . The result
6767contains all matching combinations of entities from both arguments, including all
68- unique [ primary keys] ( ../../.. /glossary#primary-key ) from both arguments.
68+ unique [ primary keys] ( ../concepts /glossary#primary-key ) from both arguments.
6969
7070In the example below, we look at the union of (A) a table pairing sessions with users
7171and (B) a table pairing sessions with scan.
7272
7373<figure markdown >
74- ![ Join example] ( ../../../ images/concepts-operators-join1.png ) {: style="height:200px"}
74+ ![ Join example] ( ../images/concepts-operators-join1.png ) {: style="height:200px"}
7575</figure >
7676
7777This has all the primary keys of both tables (a union thereof, shown in bold) as well as
78- all [ secondary attributes] ( ../../.. /glossary#seconday-attribute ) (i.e., user and
78+ all [ secondary attributes] ( ../concepts /glossary#seconday-attribute ) (i.e., user and
7979duration). This also excludes the session for which we don't have a scan.
8080
8181We can also join based on secondary attributes, as shown in the example below.
8282
8383<figure markdown >
84- ![ Join example] ( ../../../ images/concepts-operators-join2.png ) {: style="height:200px"}
84+ ![ Join example] ( ../images/concepts-operators-join2.png ) {: style="height:200px"}
8585</figure >
8686
8787??? notes "Additional join properties"
@@ -131,7 +131,7 @@ The `proj` operator represents **projection** and is used to select attributes
131131(columns) from a table, to rename them, or to create new calculated attributes.
132132
1331331 . A simple projection * selects a subset of attributes* of the original
134- table, which may not include the [ primary key] ( ../../.. /glossary#primary-key ) .
134+ table, which may not include the [ primary key] ( ../concepts /glossary#primary-key ) .
135135
1361362 . A more complex projection * renames an attribute* in another table. This could be
137137useful when one table should be referenced multiple times in another. A user table,
@@ -156,8 +156,8 @@ and others.
156156
157157The result of the union operator ` A + B ` contains all the entities from both operands.
158158
159- [ Entity normalization] ( ../normalization ) requires that ` A ` and ` B ` are of the same type,
160- with with the same [ primary key] ( ../../.. /glossary#primary-key ) , using homologous
159+ [ Entity normalization] ( ../design/ normalization ) requires that ` A ` and ` B ` are of the same type,
160+ with with the same [ primary key] ( ../concepts /glossary#primary-key ) , using homologous
161161attributes. Without secondary attributes, the result is the simple set union. With
162162secondary attributes, they must have the same names and datatypes. The two operands
163163must also be ** disjoint** , without any duplicate primary key values across both inputs.
@@ -214,7 +214,7 @@ Universal sets should be used sparingly when no suitable base tables already exi
214214some cases, defining a new base table can make queries clearer and more semantically
215215constrained.
216216
217- The examples below will use the table definitions in [ table tiers] ( ../../ reproduce/table-tiers ) .
217+ The examples below will use the table definitions in [ table tiers] ( ../reproduce/table-tiers ) .
218218
219219<!-- ## Join appears here in the general docs -->
220220
@@ -224,7 +224,7 @@ The examples below will use the table definitions in [table tiers](../../reprodu
224224
225225### By a mapping
226226
227- For a [ Session table] ( ../../ reproduce/table-tiers#manual-tables ) , that has the attribute
227+ For a [ Session table] ( ../reproduce/table-tiers#manual-tables ) , that has the attribute
228228` session_date ` , we can restrict to sessions from January 1st, 2022:
229229
230230``` python
0 commit comments