►
Description
Relevant MRs https://gitlab.com/gitlab-data/analytics/-/merge_requests/4181 and https://gitlab.com/gitlab-data/analytics/-/merge_requests/4180
A
Recording
this
all
right
awesome.
So
do
you
see
the
issue
and
vs
code?
Yes,
okay,
cool
all
right,
so
this
is
the
one
we
want
to
do
first.
B
A
A
Okay,
all
right
so
now
we're
on
that
branch.
Okay,
so
the
bamboo
extract
is
in
this
folder,
so
we've
got
two
files
api
and
execute,
so
the
api
is
kind
of
the
the
wrapper
around
all
the
different
endpoints
that
they
have
so
looking
at.
A
A
Let's
see
if
we've
got
anything
similar,
so
we've
got
the
base
url
here,
so
api
gateway,
subdomain
is
going
to
be
gitlab
and
we've
got
v1.
So
everything
this
is.
This
is
the
only
thing
we
need.
Is
this
meta
slash
fields
got
it.
Okay,
we've
got
two
options
here,
so
what
I'm
looking
at
here
is
for
each
of
these
functions
we're
generating
a
url
so
we're
using
this
base
url
and
then
we're
appending
something
to
it.
In
this
case,
like
we
have
one
specifically
for
the
employee
directory,
we
have
one.
C
A
Tabular
data
one
for
the
reports,
so
we
need
one
just
for
I
think
the
simplest
would
be
to
just
make
one
for
the
meta
specifically
for
the
metadata,
and
then
we
can
update
it
if
we
need
to
so
okay,
since
looking
at
this
there's
nothing
that
you
would
pass
in
that's
variable.
A
As
far
as
I
can
tell
oh
actually,
I
took
that
back
so
there's
so
there's
meta
fields,
there's
meta
tables
metal
list,
so
there
are
a
couple
of
options
that
we
could.
We
could
add
in
so
we'll
start
simply
here
we'll.
Let's
take
this
function,
I'm
just
going
to
copy
it
and
get
meta
data.
A
So
we're
going
to
have
this
function,
take
just
a
string,
we'll
call
it
a
name
just.
Why
not-
and
I
think
we'll
just
do
that-
just
do
that.
One
for
now.
B
A
All
right
so
similar
format
we're
going
to
import
that
base
url
and
then
we
know
the
url
is
going
to
be.
Meta
is
a
consistent
one
and
then
we
want.
A
This
this
is
the
variable
the
request,
and
then
everything
else
is
is
really
the
same,
because
I
really
have
to
check
it
otherwise.
So.
B
C
A
A
So
that's
we
consider
that
api
updated
there
and
then
this
execute
actually
like
goes
through
and
we
tell
it
what
we're
we're
getting
so
the
way
we've
done
this
is
we
basically
have
we
either
directly
get
it
like
in
the
company
directory.
A
We
just
say:
okay,
hey
we're
getting
the
employee
directory
run
the
function,
get
the
counts,
dump
it
to
a
json
file
and
then
upload
that
or
we
have
so
it's
like
calling
a
single
function,
this
one's
like
iterating
through
a
bunch
of
different
options
and
then
getting
calling
that
specific
one
doing
all
this
stuff.
A
A
This
does
a
check
on
the
data,
so
I'm
actually
going
to
comment
that
out
for
a
second.
So
we
have
a
function
in
here
that
will
basically
upload
the
data
and
then
count
to
make
sure
that
it's
like
compared
to
the.
A
All
right,
but
so
we'll
we'll
skip
that
for
now,
so
data
get
oh,
we
need
to
update
this.
Get
meta
metadata,
make
sure
I
don't
need
to
import
that.
A
No,
because
I
get
the
whole
api
okay,
so
I
was
just
making
sure
that
the
function
that
I'm
trying
to
use
here,
I
don't
need
to
explicitly
import.
I
don't
because
we're
importing
the
entire
class
here,
okay
and
then
we're
setting
here.
We
set
this
variable
to
this
class
with
the
subdomain
and
then
we
just
reference
this
and
call
different
functions
each
time,
okay,
so,
okay,
so
we're
saying
we're,
get
metadata,
we're
going
to
upload
the
json
file,
that's
written
out
and
in
this
case
it's
meta
fields.
A
If
I
spell
it
out
what
this
is
doing,
so
it's
looping
through
this
dictionary,
which
happens
to
have
one
end
entry.
So
it's
going
to
say
for
key
value
and
the
keys,
meta
fields,
values,
fields
in
this
and
then
it
you
know,
does
stuff
based
on
that,
so
it's
going
to
upload
metadata
or
meta
fields.json
and
we
want
to
load
it
into
oh,
so
this
function.
A
Hold
up
so
in
this
gitlab
data
utils
project
we
have
helper
functions
that
we
use
a
lot
and
so
snowflake
stage
load
copy.
Remove
is
pretty
much
says
what
it
does
it.
Basically,
when
you're
uploading
to
snowflake,
you
have
to
put
something
in
a
stage
which
is
kind
of
like
an
s3
bucket
and
then
a
copy
from
that
stage
into
a
table,
and
so
that's
that's
what
we're
doing
we
basically
say
take
this
file
upload
into
this
stage,
copy
it
into
this
table
using
this
connection
string,
so
click
on
it,
okay,
yeah!
A
So
in
this
case
it's
pretty
standard.
I
don't
have
to
change
the
stage
because
it's
for
bamboo
hr,
anyways,
we,
the
only
thing
we
need
to
worry
about-
is
the
table
which
in
this
case
I
think
I
actually
it's
not
smart
enough
to
actually
make
the
tables
itself.
So
I'm
going
to
go.
Make
that
real,
quick.
C
A
B
A
A
Yeah,
so
you
can
see
we
have.
We
have
all
these
tables
here,
so
I
need
to
make
a
a
new
table
that
we're
going
to
call
meta
fields
and
maybe
there's
a
better
name
for
it.
I
don't
know
if
you
have
opinions
on
that,
but
I'm.
A
This
is
one
of
those
okay
do
better
documentation
at
so
I
I
happen
to
know
that
in
our
snow
cloud
page
here
we
have
this
create
table
statement
which
I
just
copy
and
reuse
constantly,
so
so
creator
replace
table
we're
going
to
do
raw
dot,
bamboo
hr,
dot,
meta
fields
which
maps
to
what
we
have
here
and
then
this
is
the
exact
same
because
we
know
at
least
for
this
when
you
query
the
api
you're
getting
back
a
json
or
like
a
dictionary
blob,
and
we
just
insert
that
into
a
single
column.
A
And
then
the
upload
of
that
time
stamp
and
this
sets
it
to
the
default
value.
So
if
you
don't,
when
you're
copying
into
the
table,
if
you
don't
give
it
a
value,
it
sets
the
default
to
just
the
current
timestamp,
which
is
basically
what
we
want.
So
okay
creator
replace
table
baby
hr,
meta
fields,
cool,
so
that's
done
so
now.
What
I
want
to
do
is
test
this,
and
I
think
I
can
I'm
gonna
check
to
make
sure
I've
got.
A
Let's
do
it,
I
won't
do
it
locally,
we'll
do
it
we'll
do
it
in
airflow.
So
don't
worry
too
much
about
this.
This
is
just
kind
of
our
process
for
testing
airflow.
Oh
I've
never
seen
them.
A
A
C
A
B
So
then,
if
I
were
to
try
running
that
command,
would
it
work
for
me
or
would
it
not
work
based
on
my
roles.
A
Probably
wouldn't
work
based
on
your
roles.
You
can
try
it.
I
think
it's
going
to
try
and
connect
to
our
gcp
instance
and
it's
creating
a
lot
of
errors,
because
it's
doing
a
bunch
of
stuff
it's
setting
up
like
a
local
database,
spinning
up
a
web
server.
A
It's
doing
quite
a
lot
behind
the
behind
the
scenes.
Okay,
so
that's
done,
and
then
I
need
to
run
make
airflow
and
this
actually
brings
up
the
web.
B
C
A
I
have
some
stuff
lingering
around
here
that
I
don't
actually
want
to
run
okay,
so
this
is
the
the
dag,
the
airflow
dag
that
runs
it.
So
we
have
one
specifically
for
bamboo
hr.
It
does
a
bunch
of
stuff,
but
it
basically
just
runs.
This
execute
script
is
all
it's
like:
that's
what
it's
doing
at
the
end
of
the
day,
so
for
testing.
I
don't
actually
want
to
test
that
all
this
other
stuff
is
is
running,
so
I'm
going.
A
To
I'm
gonna
comment
out
all
of
this
stuff
and
just
test
the
one
thing
that
we
care
about.
Okay,
so
I
need
to
actually
real
quick.
I
think
I
need
to
commit
this.
A
I
think
okay,
so
this
so
add,
metadata
function
to
bamboo
hr
api,
commit
that
and
then
I'm
going
to.
A
This
so
this
is
a
tool
called
sublime,
merge,
okay,
so
the
visual
way
to
do
some
of
the
command
line
stuff
to
understand.
What's
changed
what
you're
committing
you
can
check
out
the
visualization
history?
I
have
okay
yeah,
so
it
costs
money
and
actually
I
haven't
paid
for
it.
Yet
after
about
like
10,
it's
an
unlimited
trial.
Just
have
okay.
C
A
Yeah,
you
can
yeah,
so
there's
so
like
if
I
change
out
of
space
here,
so
visual
studio
has
its
own
little
get
thing.
Yeah.
B
A
So
I'll
discard
that
change.
Okay,
so
I've
committed
that
because
I
think
it
pulls
from
the
remote.
I
don't
know,
let's
see
what
it
does
so,
okay,
so
the
code's
up
there.
A
B
A
B
A
Okay
cool,
so
it's
running
now
so
we're
waiting
for
it
to
spin
up
a
kubernetes
pod.
So
I
can
look
at
gcp.
A
A
So
let's
look
at
the
workload,
so
it
should
be
trying
to
spin.
Oh
my
gosh
there's
all
this.
Oh,
I
see.
A
C
C
A
C
C
A
Okay
cool,
so
this
these
log
files
are
a
nightmare,
but
so
if
we
look
at
the
dag
again,
we
can
see
we
can
try
and
figure
out
what
it's
doing.
So
this
is
the
main
bit
of
the
command,
and
you
can
tell
we
copied
this
from
other
things
because
it
says
sftc,
but
this
should
be
hr.
B
A
A
To
run
this
script,
this
clone
and
setup
extraction
command
is
a
standard
thing
where
we're
like.
Okay,
the
orchestration
stuff
is
in
here
move
to
this
folder,
and
then
we
have
a
bunch
of
other
stuff
where
it
clones
the
project
into
the
thing.
Okay,.
A
List
of
what
it's
actually
doing,
so,
if
we
look
at
the
render
template
in
here,
do
you
have
access
to
airflow.
B
I
just
submitted
an
access
requests.
A
C
Cool
we
cause,
you
should
be
able
to
do
this
real.
A
Quick,
so
within
any
dag,
really
you
can
go
into
this
rendered
template
which
shows
like
hey.
This
is
based
on
all
your
code.
This
is
what
we're
running
and
this
arguments
command
is
what
is
actually
being
run,
which
is
it's
a
lot
of
text
to
say
so.
A
If
I
look
here
so
it's
like
it's
doing
a
bunch
of
stuff,
it's
doing
a
git
clone
it's
echoing
some
stuff
to
the
command
line,
moving
to
a
directory
and
then
running
python.
So
that's
all
it's
doing,
okay,
so
we're
so
we
got
this
locally.
It
ran
it
passed.
A
We
look
at
the
logs.
The
most
interesting
bit
is
down
here
so
saying
cloning
into
analytics,
checking
out
the
head,
getting
the
branch
that
we're
on
and
then
this
is
all
like
snowflake
stuff,
so
it's
getting
the
metadata,
and
so
that
ties
back
to
what
we
wrote
here,
getting
metadata
for
fields
and
then
this
is
all
snowflake
stuff,
responding
back
like
it's
putting
the
json
file,
it's
copying
into
table
and
then
it's
removing
the
file
from
the
stage,
because
we
just
want
to
clear
that
out
when
we're
done
so
now,.
A
A
Here
now,
if
I
look
at
meta.
A
A
So
yeah,
so
we've
got
data
there
and
we've
got
uploaded.
It.
B
A
So
cool
it
works
now.
What
we
want
to
do
real,
quick
is
uncomment
out
the
testing
that
we
did
to
make
sure
everything
works.
So
I'm
not
super
familiar
with
this
this
function.
So
what
is
it
doing?
Well,
there's
no
comment
here,
but
so
it's
taking
the
data
looking
at
the
snowflake
table
tables
to
skip
field
name
json
text,
which
is
the
default.
A
A
Oh,
I
guess
maybe
it's
for
testing.
It's
really
interesting,
I'm
not
sure
where
that
is,
but
okay,
let's
just
let's
just
test
it,
okay,
so
we
need
to
tell
it
what
data
we
want.
I.
A
A
Okay,
so
if
we
just
do
record
key
counseling
length
data
and
what
do
you
do.
A
Oh,
I
see
okay,
so
oh
interesting,
so
he's
using
something,
that's
called
sorry.
I
keep
saying
he
because
I
think
michael
did
a
lot
of
this.
B
A
Okay,
so
if
we
look
in
production,
so
it's
using
something
called
an
x-com
which
is
a
way
to
pass
data
kind
of
between
different
jobs.
So
if
I
look
at
the
production,
bamboo
hr
extract
and
I
come
into
a
specific
job.
And
then
I
look
at
xcom.
A
I
think
when
we're
getting
we're
sending
like
logs
to
prometheus,
I
think
in
here.
If
I
look
for
bamboo
hr.
A
B
A
Yeah
and
so
like
you
can
see,
the
record
counts
here
for
each
of
these
and
we
can
look
at
those
over
time
and
then
we
have.
I
think
we
have
some
alerting
if
it
drops
dramatically
or
something
so
that
basically
will
tell
us
if
something
goes
wrong
with
the
extract.
Okay,
cool
we're
getting
caught
up
here.
So
so
all
we
need
here
is
to
pass
in
or
let
me
actually
do
it
on
the
other
side.
So
we've
got
our
test
extraction
here.
So
all
we
really
need
is
data.
A
A
A
All
right,
so
I
am
still
local,
so
I'm
just
gonna
trigger
this
again
and
I
should
would
expect
to
see
it's
gonna
upload,
another
another
file,
but
I
wanna
see
in
the
logs.
That's
actually
doing
this.
This
test.
A
C
C
C
A
Yep,
it's
good,
it's
getting
getting
query
now,
it's
uploading
to
snowflake
and
then
it
should
do.
A
This
is
the
dag
run
duration.
Did
it
actually
get.
A
It
and
this
is
and
so
like.
This
is
one
of
the
reasons
that
I'm
not
a
huge
fan
of.
I
mean
testing
and
prod,
but
like
we're
just
entering
in
the
same
data
a
bunch
of
times
but
yeah.
It's
fine
like
it's
not
a
huge
amount
of
data,
it's
very
cheap
so
and
since
it's
the
real
data
like
I'm,
not
taking
a
test
and
since
like
it's
after
this
gets
merged,
I'm
just
gonna
leave
it
in
there
like
it's,
not
hurting.
Okay,.
A
So
you
have
to
push
it
up
to
the
remote,
because
one
of
the
commands
in
here
is:
is
cloning
like
getting
your
branch
from
gitlab.com
so
got
it?
Okay,.
B
A
Okay,
so
getting
metadata,
it's
running
the
query.
A
Interesting,
that's
not
being
written,
maybe
that's
something
weird
about
local
doing
it
locally.
Okay,
I'm
not
super
worried
about
it.
Let's
just
put
it
that
way.
B
A
Okay,
cool
so
we're
gonna
say
that
works
so
now.
Basically,
the
last
thing
left
to
do
just.
A
Uncomment,
this
get
the
code
back
to
a
happy
state
comment
and
there's.
There
was
two
ways
to
do
this,
so
I
had
a
commit
here
that
I
could
have
like
specifically
reverted
or
it's
just
easier,
sometimes
to
just
manually,
revert
it
or
just
like
manually
undo
the
changes.
A
So
that's
good,
so
push
it
up
refresh
this
page
and
just
kind
of
sanity
check
that
you've
done
everything
right,
so
bamboo
hr,
we've
got
our
new
function
and
we've
got
the
new
extract,
and
so
what
I
would
do
next
is
you
know,
edit
the
description.
Get
it
ready
like
I'll,
take
some
screenshots
to
show
how
I
tested
it.
A
sample
sql
query
to
show
that
it's
in
the
database
and
then
I'll
pass
it
off
to
michael
for
review.
So,
okay,
that
one's.
A
There
is
nothing
really
to
run
so
a
lot
of
the
pipelines
are
set
for
the
analysts,
like
with
a
few
exceptions,
there's
not
a
ton
of
pipelines
that
run
in
here,
one
that.
A
Me
there
is
one
thing
that
we
need
to
do
so
we
need
to
lint
our
code,
so
the
data
engineers
have
good
linting
the
data
analysts.
We
don't
have
good
linting,
so.
A
A
We
have
a
bunch
of
other
tests
that
run
so
it's
like
it's
trying
to
find
all
the
tests
like
the
python
tests
and
run
those
we
don't
have
any
tests
for
the
bamboo
hr
extract
and
that's
just
one
of
the
unique
things,
but
we
do
need
to
lend
everything
so
locally.
What
I
do
is,
I
do
a
lot
of
development
in
permafrost
and
we
use
black
also
for
permafrost,
and
I
have
a
virtual,
like
a
python
virtual
environment
set
up.
A
A
I'm
not
going
to
worry
about
the
stuff
that
I
didn't
touch
so
discard
that
one,
let's
grab
that
one
just
go
to
that
one.
So
you
can
see
so
this
one
yeah.
So
what
it's
doing
here
is
it's
bringing
so
this
the
function
that
we
copied,
because
we
got
rid
of
one
of
the
function
parameters
it
just
puts
it
online.
It
gets
rid
of
an
extra
line
here,
drops
some
extra
wipes
white
space
on
that.
A
B
A
That
in
a
separate,
mr,
but
we
linted
those
two
files
so
we're
good
to
go
so
there's
really
there's
really
nothing
you
have
to
run.
Ideally,
this
would
would
be
green
too.
So.
B
B
Is
really
it's
just
like
testing,
locally
and
or
testing
in
prod
to
make
sure
everything
runs
as
expected.
A
Essentially,
yeah:
okay,
well,
testing
test
testing
locally
in
fraud.
So
it's
like
it's
a
different
name
space
in
kubernetes,
but
it's
actually
writing
to
the
production
database,
which
yeah
for.
B
B
C
A
A
A
A
We
have
in
fact,
let
me
actually
do
this,
so
we
have
a
user
like
a
bot
user
called
get
lab
analytics,
which
may
actually
already
have
access
to
this.
So
it's
the
analytics
api,
gitlab
log
and
it's
like
a
true
getlab
login.
So
I'm
going
to
log
in
as
this
this
little
guy,
I'm
in
a
private
window
to
test
this
out.
So
I
guess
he
has
a
two-factor
authentication
code.
Let
me
move
this
down
here,
so
let
me
add:
analytics.
A
Aha,
yes,
so
we've
got
two
factor:
auth
set
up
in
one
password,
so,
okay,
this
so
login,
okay!
So
my
so
not
my!
The
api
user
does
not
have
access
to
this
project.
So
that's
it
to
do.
Is
I
have
to
set
up
an
access
request
for
that,
but
let's
say
that
it
did.
What
are
we
going
to
do
so?
We
need
to
basically
get
all
of
well,
we
specifically
want
one,
but
we
need
to
get
all
the
ones
all
right.
So
let's
look
at
the.
A
Here
so
the
gitlab
features
flag.
One
is
one
that
I
just
wrote
for
camille
yeah
to
get
the
to
get
lab
the
product
repo
and
then
copy
some
data
out
of
that.
A
Is
this
gitlab
data
yaml
upload.pi
so
similar
to
what
we
did
with
bamboo
hr
we've
got
dictionaries
of
you
know:
here's
the
key:
here's
the
value,
the
key
maps
of
the
table,
value
maps,
the
the
file
name
and
what
we're
what
we're
doing
is
going
to
the
raw
data.
A
A
There
we
go
so
that's
yeah,
so
that's
the
raw
data.
So
that's
what
we
want
for
for
this.
So
let's
go.
A
Okay
is
what
do
you
mean,
so
this
is.
This
is
all
behind
like
we're
not
pulling.
B
A
Yeah
see
so
it's
nothing
has
been
uploaded,
so
we
need
we
yeah,
so
we'll
have
to
move
them
all.
But
what
am
I
trying
to
do
here?
So
I
just
want
to
get
the.
A
B
A
So
yeah
so
a
private
token
seems
to
be
the
way
to
go,
and
actually
I
can't
I
don't
want
to
share
this
on
the
screen,
so
I'm
gonna,
so
I'm
doing
something
locally.
So
one
of
the
things
so
I
do
have
my
own
private
token.
A
So
one
of
the
things
that
I
do
via
the
command
line
just
to
share
this,
so
we
have
like
I'll
do
snowflake
spend.
A
So
this
is
our
dbt
package
for
our
snowflake
spend
and
I
cut
releases
that
are
tied
to
a
specific
commit.
So
you
know
so,
like
you
in
your
dbt
packages.aml
can
say,
get
me
version
1.2.0
and
okay.
Now
you
can
do
this
by
via
the
ui,
but
it
used
to
be.
You
can
only
do
it
via
the
command
line,
and
so
you
would
literally
I
have
let
me
copy.
A
A
Okay,
that's
in
a
bunch
of
information
passing
your
private
token
and
then
like
tell
it
what
you're
you're
trying
to
do
so,
I
think
we're
gonna,
follow
the
same
format
and
pass
in
this
private
token
to
get
this
data,
and
so
I'm,
what
I'm
going
to
do.
Real
quick
is
just
test
off
screen
to
see
if
this
this
works.
C
C
C
C
A
A
C
C
A
All
right,
so
let
me
build
this.
I
want
to
build
this
up,
something
that
I
can
actually
show.
You
did
not
reveal
my
token
okay,
so
so
we're
down
here.
So
this
is
what
I'm
testing
locally.
I
just
replaced
the
the
token
here,
so
I've
got
the
project,
so
I
need
to
get
rid
of
all
of
this,
because
this
is
the
project
name
and
then
I
think
I
get
rid
of
raw.
I
don't
need
the
branch
name,
so
I
think
it's
just
data
location
factors,
dot,
dml,
slash
raw,
maybe.
C
A
A
Excuse
me,
so
if
you
just
google
url
decode
encode,
so
you
put,
I
copy
it
in,
and
it's
going
to
tell
you
it's
lib
class.rb,
so,
okay,
I
need
to.
I
need
to
encode
what
did
we
have
here?
We
had
location
data,
location
factors,
dot,
yaml,
so
I'll
paste
that
whole
thing
in
here
and
code.
It
got
it
here,
paste
that
in
there
come
to
the
command.
C
C
A
Oh
interesting
that
it
doesn't
oh,
oh,
so
it
encoded
the
slash
but
not
the
period.
But
if
you
look
at
the
docs
it
encoded
the
period
as
well.
So
I'm
just
going
to
copy
this
percent
to
e
okay
and
replace
that.
A
B
A
B
A
A
B
Could
I
do
this
locally
too,
like
yes,
like
based
on
the
directions,
just
like
create
a
token
and
then
try
to
grab
a
file?
Okay,
cool
yep,.
A
Yeah,
especially
since
you
already
have
access,
so
I
think
in
your
gitlab
settings
yeah,
you
just
make
your
own
personal
token.
Okay,
I
think
just
follow
the
directions
in
the
personalized.
A
B
A
So
that's
what
we're
trying
to
work
through
here.
B
A
Awesome,
so
what
we
can
do,
I
think
the
best
way
to
do
this,
I
think,
is
just
where
I'm
gonna
update
the
this
function,
to
just
take
a
private
token
and
set
it
to
none.
A
A
The
private
token
that
shouldn't
be
that
should
be
no
problem.
So,
okay,
I
think
the
easy
way
to
do
this
is,
if
private
token
is
not.
None
then
set
header
equal
to
we're.
Gonna
do.
B
A
C
A
Okay,
close
it
okay.
So
what
I'm?
Yes,
what
I'm
doing
here
is
I'm
literally
setting
this
header
variable
to
the
entire
string
dash
dash
header
private
token,
set
the
private
token,
and
if
it
is
none,
then
I
just
want
header
to
be
an
empty
string,
and
then
I
think
all
I
can
okay.
All
I
have
to
do
is
just
put
in
here
header,
and
that
should
be
okay,
because
I
think.
A
Well,
oh
yeah
good
point.
Well
so
we'll
do
that
down
yeah
when
you
need
a
dictionary,
so
we
need
a
people
ops.
Well,
actually
I
did
all
of
these
move
right.
A
B
Categories
is
still
in
the
same
project
that
it
was,
and
it's
not
private
everything
else,
I
think,
is.
A
So
we
know
that
that's
the
handbook,
and
so
now
this
is
going
to
be.
What
do
we
call
this
couple?
It's
called
the
compensation
comp
calculator.
B
B
A
Okay,
good,
so
so
we'll
do
location
factors
and
we
want
job
families,
presumably.
B
A
Zones
so
that
means
we
only
have
to
make
one
new
table
for
the
geo
zones.
A
C
C
A
That
goes
there
that
can
still
be
based
url
that
can
be
based
url.
This
could
be
a
handbook
url,
so
the
I
want
the
function
to
be
generic,
but
I
want
the
variables
here
to
be
clear.
So
I
want
this
is
the
handbook
url,
the
pi
url
appends,
to
the
handbook
url
the
function
is
generic
referencing
a
base
url,
and
then
we
pass
into
the
function
handbook
url,
so
so
we've
added
private
token
equals
none,
and
so
the
format
here
is
for.
A
A
C
This
we'll
make
it
easy
we'll
just.
A
A
B
C
A
A
A
A
B
A
An
f
string
is
a
way
to
pass
in.
You
can
google
this
later,
but
basically
it's
a
way
to
pass
in
variables
to
a
string,
and
so
it
used
to
be.
You
have
to
do
like
you
have
to
do
the
string
name,
then
dot
format
and
then
pass
in
the
variables
and
it
references
like
those
percent
values.
This
just
makes
it
easier,
so
you
can
do
like
stuff.
You
can
do
with
like
jinja
and
just
reference
it
like
that.
Okay.
But
I
think
if
I
said
this
is
an
f
string
it.
A
It
makes
this
happy
so
percent
2f.
So
that's
my
base
url
and
then
we
have
the
file
name
and
we
have.
A
A
This
okay,
so
let's
test
this:
let's
test
this
locally,
I
think
this
will
actually
work,
so
I'm
going
to
test
it.
How
am
I
going
to
test
this.
A
No,
I
gotta
I
gotta.
I
have
to
pass
it
in
the
private
token,
so
I
got
to
think
oh.
A
Token,
so
I
think
we're
gonna
call,
so
we
are
from
the
environment
copying
the
configuration
dictionary
so
presumably
within
here.
I
would
pass
in
a
secret
so
we'll
call
this
bamboo.
A
A
Like
user
private
token,
so
you
have
to
have
this
whole
thing,
which
tells
it
how
to
map
reference.
I
don't
like
this
confusing,
but
that's
kind
of
what
we
need.
There's
that
I
need
to.
B
Could
you
also
I
was
gonna
ask?
Could
you
also
add
this
the
token
to
your
adam
profile
and
then
do
it
that
way
like
if
it,
if
you
have
one.
A
Local
environment
there
there
is
a
world,
you
could
run
this
job
locally,
there's
just
a
few
more
things
you
have
to
set
up
like
you'd,
have
to
have
the
snowflake
user
and
everything
that's
just
kind
of
a
pain
that
was
you
to
set
up
okay.
So
for
the
time
being,
I'm
going
to
comment
that
out
and
then
just
get
all
this
merged
up.
So.
A
B
A
A
A
A
That's
fun
always
fun.
Okay.
I
just
realized
we're
not
actually
passing
in
the
private
token
here,
so
we
need
to
reference
the
config
dict
and
then
tell
it
hey.
I
want
you
to
use.
A
Oh,
I
shouldn't
jump.
This.
C
B
B
B
A
A
All
right
so
I
started
this
dag
and
it
automatically
triggers
one.
So
let's
go
to
the
logs,
so
it's
running
it
will
probably
fail
on
one
of
them
because
I
didn't
no,
I
didn't
make
the
table.
So
actually
we
should
be
good.
B
No,
I
was
looking
at
the
for
the
file
name
or
the
dad.
A
B
A
Okay,
so
that
should
be
happy
now.
Okay,
so
nothing.
C
A
B
A
C
C
C
B
B
So
and
then
like
am
I
able
to
get
to
the
local
host
as
well
or
like
everyone
on
the
data
team.
B
A
On
your
computer
you're
telling
you
could
connect
a
local
host
you're
telling
the
web
browser
to
look
on
this
on
your
machine
to
connect
to
whatever
port.
So
I'm
running
the
airflow
web
server
on
88
and
so
like
when
you
spin
up
dbt
docs
that
runs
on
like
you
connect
to
localhost
at
whatever
port
number,
it
happens
to
be,
and
it's
serving
those
pages
locally
instead
of
connecting.
A
A
C
A
So
one
of
the
one
of
the
things
I'm
doing
now
is
I
spun
up
the
data
image
container,
so
this
runs
in.
If
you
look
at
this
dag
it
runs
in
the
data
image
container.
So
I
just
spun
that
up
locally
so
that
I
have
access
to
all
this
stuff
easier.
C
A
A
A
A
B
B
Could
I
do
like,
if
I
just
wanted
to
bring
in
a
data
yaml
file
like
the
performance
indicator
files?
B
B
A
A
A
A
A
I'm
just
printing
this
to
the
command
line,
just
to
see,
what's
actually
being
run,
to
see
if
I
can
find
out
what
the
problem
is,
because
I
don't
have.
C
C
C
A
A
A
B
A
A
B
A
B
B
A
C
A
Maybe
it's
related
to
the
issues.
Slack
is
having
yeah
so
like
the
logs
that
I'm
looking
at
here
very
similar
to
what
we're
seeing
you
just
usually
get
a
little
bit
more
information.
Okay,
but
now
it
looks
like
it's
traveling
along
so
yeah
nice.
A
It
looks
like
it's
working
so
because
I'm
connecting
with
my
private
token
we're
getting
location
factors,
we're
getting
it's
removing
location
factors
and
it's
doing
job
families
then
should
be
doing
geo
zones.
Yeah
geo
zones
yeah,
so
it
it
seems
to
have
run.
So
if
I.
A
B
A
Cool,
okay,
all
right!
So
let's
get
this
tightened
up
real
quick!
Since
we
know
we've
tested
that
it
works
locally,
so
I'm
gonna
revert
everything
back
to
the
way
it
was.
A
So
get
that
there
get
rid
of
this
clean
command.
A
A
Build
up
the
let's
do
it
this
way,
we'll
pull
this
back
out
out
of
this.
If
else
loop
and.
A
A
The
references
here-
okay-
and
I
think
that's
much
cleaner,
so
just
test
it
again.
Real
quick.
A
Let's
I'm
just
gonna
run
this
again
and
then
that's
really
that's
the
meat
of
it,
and
so
I
think
the
follow
up
from
this
would
be.
I
need
to
uncomment
that
out,
but
I
need
to
make
the
access
request
to
get
the
user
to
have
access
to
that
project.
I'll
make
the
private
token.
I
need
to
upload
that,
but
that's
that's
basically
it.
I
think.
B
A
So
the
other
thing
so
just
to
walk
through
this
real
quick.
What
we're
doing
is
we,
we
curl
the
file
to
get
the
data
and
like
if
you,
if
you
run
this
part
you
you
could
do
it
on
this
one.
Since
you
don't
have
to
authenticate
you
like
curl,
that
raw
file,
it's
just
going
to
spit
out
the
command
line,
and
so
what
we're
doing
here
is
piping
it
to
this
tool
called
the
gamble
to
json,
which
is
actually
built
into
built
into
the
data
image
container.
A
So,
if
you're
in
the
analytics
project,
if
you
run
make
data
image,
it's
going
to
yeah
spin
up
the
same
image
that
airflow
uses
and
just
drop
you
into
the
command
line
there.
So
you
have
access
to
these
all
these
commands
and
things
like
that.
So
if
you
actually
just
come
in
here,
okay,
let's
say
I
build
up
sorry
we'll
just
type
it,
because
that's
easier!
A
So
let's
say
I'm
doing
this.
One
curl
data-
and
I
want
categories-
is
that
short
team.yaml,
so
I'm
just
trying
to
copy
what
I
got
here
hit
that
so
cool
it
queries
it
right
into
the
command
line,
and
then
you.
A
A
B
A
So
this
is
still
running.
What's,
oh,
I
did
it
yeah,
okay,
so
the
refactor
worked
it's
running.
I'm
gonna
cancel
the
running
because
I
commented
I
put
back
in
this
one.
It
takes
a
little
bit
longer
to
run
so
I'm
just
going
to
okay
kill
the
job.
Maybe
it
already
finished.
A
Yeah,
so
this
looks
pretty
good.
I
can
comment
that
retry,
but
yeah.
This
is
so
I'll.
You
know
I'll
get
this
cleaned
up,
indicate
that
it's
blocked
by
that
access
request,
which
I
can
make
and
then
I'll
get
it
reviewed,
and
we
can
get
this
in
probably
okay.
Well,
it
depends
on
how
long
it
takes
to
get
that
approval
to.
A
A
Yeah,
of
course,
let
me
stop
the
recording
any
before
I
do
any
any
other
questions,
any
I'm
sure
there's
a
ton
of
stuff.
B
A
B
But
if
you
run
across
anything
that
you
might
think
would
be
like
a
good
one
for
to
test
out,
that's
not
gonna
require
a
lot
of
time.
I'd
be
willing
to
try
it
out.
Actually,
I
think
that
paul
has
one
for
like
greenhouse
access
requests,
which
I
don't
think
that
one's.
A
B
A
You
know
one
of
the
other
files,
if
that's
something
that
you're
interested
in
oh
okay
and
try
and
get
that
working
locally
and
kind
of
like
debug
all
the
stuff.
The
only
thing
is,
we
have
to
give
you
access
to
gcp,
but
you
could
still
test
test.
No,
because
you
don't
have
the
you,
don't
have
the
api
key.
I
think.
A
B
A
Yeah
another
a
good
tool
to
learn
is
this
tool
called
jq,
it's
a
little
bit
confusing,
but
what
you
can
do
is
so
I
would
recommend.
First,
you
know
testing
like
okay.
Can
I
use
curl
to
get
this
data
and
then
save
it
into
a
file,
but
then
I
would
play
with
using
this
tool
called
jq
to
actually
like
manipulate
the
the
data
in
there.
So
you
can
so.
Let's
say
I
have
this
this
file
json.