bigtable: add row sample filter

Change-Id: I97d198d1c5e670f87a171ac335738914c7118419
Reviewed-on: https://code-review.googlesource.com/31430
Reviewed-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Jonathan Amsterdam <jba@google.com>
diff --git a/bigtable/filter.go b/bigtable/filter.go
index 9ef7137..4c9dccf 100644
--- a/bigtable/filter.go
+++ b/bigtable/filter.go
@@ -314,4 +314,17 @@
 	return &btpb.RowFilter{Filter: &btpb.RowFilter_CellsPerRowLimitFilter{CellsPerRowLimitFilter: int32(clf)}}
 }
 
-// TODO(dsymonds): More filters: sampling
+// RowSampleFilter returns a filter that returns each row with a probability of P (must be in the interval (0, 1)).
+func RowSampleFilter(p float64) Filter {
+	return rowSampleFilter(p)
+}
+
+type rowSampleFilter float64
+
+func (rsf rowSampleFilter) String() string {
+	return fmt.Sprintf("filter(%f)", rsf)
+}
+
+func (rsf rowSampleFilter) proto() *btpb.RowFilter {
+	return &btpb.RowFilter{Filter: &btpb.RowFilter_RowSampleFilter{RowSampleFilter: float64(rsf)}}
+}